我目前正在使用C ++中的Qt 5.7-5.8工作,并且我试图在其下面用一条黑色实线强调QLabel。知道我的QLabel在QGridLayout中,我已经尝试过这段代码,但它没有显示该行。
mViewerLayout->itemAtPosition(0, 0)->widget()->setStyleSheet("border-bottom: 8px solid black");
我尝试过设置对象名称并通过objectName()设置样式表,我已经尝试过编写" QWidget"而不是" QLabel"在下面的代码示例中的setStyleSheet()函数调用的引号内,我尝试了不使用objectName()。
mViewerLayout->itemAtPosition(0, 0)->widget()->setStyleSheet("QLabel {border-bottom: 8px solid black;}");
如果我将样式表设置为border: 8px solid black
,那么它可以工作并覆盖QLabel的所有边框,但我只想强调它并且边框底部看起来不起作用,即使我知道这就是你如何在CSS中指定底部边框,甚至Qt文档似乎都指定了这种语法。有人可以纠正我吗?
答案 0 :(得分:1)
这样的事情怎么样:
QLabel * lab = static_cast<QLabel *>(mViewerLayout->itemAtPosition(0, 0)->widget());
QFont f = lab->font();
f.setUnderline(true);
lab->setFont(f);
我认为只使用内置的下划线功能会比尝试伪造它更容易,效果更好。
答案 1 :(得分:0)
QLabel上的以下样式表应该可以解决问题:
border-bottom-width: 1px;
border-bottom-style: solid;
border-radius: 0px;
可能有更好的方法,但我看到的是,如果你没有指定半径,则不会显示该行。
显示正常工作的完整代码:
#include <QApplication>
#include <QLabel>
#include <QLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget widget;
QVBoxLayout *l = new QVBoxLayout(&widget);
QLabel label;
label.setText("This text is underlined");
label.setStyleSheet("border-bottom-width: 1px; border-bottom-style: solid; border-radius: 0px;");
l->addWidget(&label);
l->addWidget(new QWidget());
widget.show();
return a.exec();
}
结果是:
您是否在应用程序上设置了与标签上设置的样式冲突的其他样式表?