如何使用C ++中的Qt在QGridLayout中为QLabel加下划线?

时间:2017-07-16 23:18:25

标签: c++ qt c++14

我目前正在使用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文档似乎都指定了这种语法。有人可以纠正我吗?

2 个答案:

答案 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();
}

结果是:

enter image description here

您是否在应用程序上设置了与标签上设置的样式冲突的其他样式表?