如何集中QProgressBar的块?

时间:2017-10-09 18:34:47

标签: qt user-interface widget

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

enter image description here

父窗口小部件的样式表为"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个重新实现的方法的自定义内容),我也对此持开放态度。

1 个答案:

答案 0 :(得分: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

Qt Stylesheet 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);

希望有所帮助。