代码之家  ›  专栏  ›  技术社区  ›  Narek

qt-qpushbutton文本格式

  •  7
  • Narek  · 技术社区  · 15 年前

    我有一个QpushButton,上面有一个文本和图标。我想把按钮上的文字变成粗体和红色。看了看其他论坛,谷歌搜索,我失去了希望。如果按钮有一个图标(当然,如果你不创建一个新的图标,它是文本+以前的图标),就没有办法做到这一点。这是唯一的方法吗?有人有更好的主意吗?

    3 回复  |  直到 10 年前
        1
  •  18
  •   mutil    12 年前

    您真的不需要子类来更改按钮的格式,而是使用样式表,例如。

    QPushButton {
        font-size: 18pt;
        font-weight: bold;
        color: #ff0000;
    }
    

    将此应用于要更改的按钮将使按钮文本为18pt、粗体和红色。你可以通过申请 widget->setStyleSheet()

    将此应用于上面层次结构中的一个小部件将为下面的所有按钮设置样式, QT stylesheet 这种机制非常灵活,并且有很好的文档记录。

    您也可以在设计器中设置样式表,这将为您正在编辑的小部件设置样式。

        2
  •  5
  •   Naruto    15 年前

    您创建“qpushbutton”的子类,然后重写paint事件, 在这里,您可以根据自己的意愿修改文本。

    它在这里,

    class button : public QPushButton
        {
        Q_OBJECT
    
    public:
        button(QWidget *parent = 0)
            {
    
            }
        ~button()
            {
    
            }
    
        void paintEvent(QPaintEvent *p2)
            {
    
            QPushButton::paintEvent(p2);
    
                QPainter paint(this);
                paint.save();
                QFont sub(QApplication::font());
                sub.setPointSize(sub.pointSize() + 7);
                paint.setFont(sub);
                paint.drawText(QPoint(300,300),"Hi");
                paint.restore();
    
            }
        };
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
    
        button b1;
        b1.showMaximized();
        return a.exec();
    }
    
        3
  •  2
  •   Петър Петров    10 年前

    您可以对Qlabel进行子类化,并完全丢弃它的所有鼠标事件(以便它们到达父级)。 然后装箱一个qpushbutton,在上面设置一个布局,在这个布局中插入一个带有格式化文本的qlabel。您会得到一个包含qlabel的按钮,并且可以点击。(任何Qt小部件都可以有布局集,包括您从未预料到的布局集。)