【问题标题】:How to center a QProgressBar's chunk?如何使 QProgressBar 的块居中?
【发布时间】:2017-10-09 18:34:47
【问题描述】:

我有这个音频查看器,由于缺少更好的小部件,它使用 QProgressBars 来显示总音量和每个 RTA bin 的音量,除了选择一系列“有趣”的 bin:

父小部件的样式表为"background-color: DimGray;";我不知道这是否与问题有关。进度条本身是这样设置的:

AudioMeter::AudioMeter(..., QWidget* parent) :
    QWidget(parent)
{
    ...
    meter = new QProgressBar(this);
    meter->setOrientation(Qt::Vertical);
    meter->setFormat("");
    meter->setGeometry(...);
    meter->setRange(FixedPoint::Zero, FixedPoint::One);
}

并像这样使用:

void AudioMeter::setValue(int value)
{
    meter->setValue(value);
}

问题是块(浅蓝色)似乎向左偏移了几个像素并向上偏移了一两个像素,所以它看起来不正确。这在 Lubuntu 16.04 LTS(如图)和 Ubuntu 16.04 LTS 上是正确的。我怎样才能使它们居中?


或者如果有更好的小部件可以使用(使用简单的代码,而不是像我在一些示例中看到的那样具有 20 个重新实现的方法的自定义东西),我也愿意。

【问题讨论】:

    标签: qt user-interface widget


    【解决方案1】:

    http://doc.qt.io/qt-4.8/stylesheet-examples.html#customizing-qprogressbar

    http://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qprogressbar

    http://doc.qt.io/qt-5/stylesheet-customizing.html#the-box-model

    https://www.w3schools.com/css/css_padding.asp

    看起来正确的填充可能由于某种原因而关闭。

    // try this and see if it helps
    meter->setStyleSheet("padding: 0;");
    // or just zero out the right padding
    meter->setStyleSheet("padding-right: 0;");
    

    如果没有,您可能需要进行一些样式表编辑迭代...

    在与您的程序相同的路径中使用stylesheet.css 文件:

    http://doc.qt.io/qt-5/qapplication.html#QApplication

    -stylesheet= 样式表,设置应用程序样式表。该值必须是包含样式表的文件的路径。

    所以你用

    运行你的程序
    meters -stylesheet=./stylesheet.css
    

    并填写stylesheet.css

    QProgressBar {
        /* attempt at fix by removing all padding */
        padding: 0;
        /* Another style to try out sometime:
    QProgressBar {
        border: 2px solid grey;
        border-radius: 5px;
    }
    
    QProgressBar::chunk {
        background-color: #05B8CC;
        width: 20px;
    }*/
    }
    

    我还通过将重新加载连接到应用程序范围的热键或程序中的按钮来完成样式表的原型设计。

    QString stylesheet;
    QFile f("stylesheet.css");
    if (f.open(QFile::ReadOnly | QFile::Text))
    {
        QTextStream in(&f);
        stylesheet = in.readAll();
    }
    qApp->setStyleSheet(stylesheet);
    qApp->style()->unpolish(qApp);
    qApp->style()->polish(qApp);
    

    希望对您有所帮助。

    【讨论】:

    • 实际上,是border 做到了,而不是padding,但你走在了正确的轨道上。 +1,也许是接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多