【问题标题】:How to underline a QLabel in a QGridLayout with Qt in C++?如何在 C++ 中使用 Qt 为 QGridLayout 中的 QLabel 下划线?
【发布时间】:2017-07-16 23:18:24
【问题描述】:

我目前正在使用 C++ 中的 Qt 5.7-5.8,我正在尝试用黑色实线在 QLabel 下划线。知道我的 QLabel 在 QGridLayout 内,我尝试了这段代码,但它没有显示该行。

mViewerLayout->itemAtPosition(0, 0)->widget()->setStyleSheet("border-bottom: 8px solid black");

我已经尝试设置对象名称并通过它的 objectName() 设置样式表,我尝试在下面的代码示例中的 setStyleSheet() 函数调用的引号内写“QWidget”而不是“QLabel”,我试过不使用objectName()。

mViewerLayout->itemAtPosition(0, 0)->widget()->setStyleSheet("QLabel {border-bottom: 8px solid black;}");

如果我将样式表设置为border: 8px solid black,那么它可以工作并覆盖 QLabel 的所有边框,但我只想强调它并且border-bottom 似乎不起作用,即使我知道这是您指定的方式CSS 中的底部边框,甚至 Qt 文档似乎都指定了这种语法。有人可以纠正我吗?

【问题讨论】:

    标签: c++ qt c++14


    【解决方案1】:

    这样的事情怎么样:

     QLabel * lab = static_cast<QLabel *>(mViewerLayout->itemAtPosition(0, 0)->widget());
     QFont f = lab->font();
     f.setUnderline(true);
     lab->setFont(f);
    

    我认为只使用内置的下划线功能会比试图伪造它更容易并且产生更好的结果。

    【讨论】:

    • 您好,谢谢您的回答。问题是,我不是想强调一些词!我想在 QLabel 形成的矩形的底部边框上画一条粗线。
    【解决方案2】:

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

    结果是:

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

    【讨论】:

    • 您好,谢谢您的回答,非常感谢!我已经尝试过您推荐的样式表,但它仍然没有显示该行。我会尝试一些其他的东西。
    • @Quoc-Minh 查看我的更新,我已经使用 Qt 5.7 和 5.9 进行了测试,似乎在独立示例(代码)中工作。该示例在独立应用程序中对您有什么帮助?
    • 谢谢!你刚刚解决了我的问题。看来我必须将标签放在 QBoxLayout 中,然后让 QWidget 作为容器来将布局设置为 QBoxLayout。然后将该容器 QWidget 添加到我的 QGridLayout 显示 QLabel 的底部边框。我真的不明白为什么它没有容器就不会显示,但是哦,它工作得很好哈哈!
    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2019-02-16
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多