Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-QPushButton文本格式_C++_Qt_Formatting_Button - Fatal编程技术网

C++ Qt-QPushButton文本格式

C++ Qt-QPushButton文本格式,c++,qt,formatting,button,C++,Qt,Formatting,Button,我有一个QPushButton,上面有一个文本和图标。我想把按钮上的文字改成粗体和红色。看看其他论坛,谷歌搜索,我失去了希望。如果按钮有一个图标(当然,如果你没有创建一个新图标,即文本+以前的图标),那么似乎没有办法做到这一点。这是唯一的办法吗?有人有更好的主意吗?您创建了“QPushbutton”的子类,然后覆盖绘制事件, 在这里,您可以根据自己的意愿修改文本 在这里 class button : public QPushButton { Q_OBJECT public:

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

您创建了“QPushbutton”的子类,然后覆盖绘制事件, 在这里,您可以根据自己的意愿修改文本

在这里

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

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

QPushButton {
    font-size: 18pt;
    font-weight: bold;
    color: #ff0000;
}
将此应用于要更改的按钮将使按钮文本为18pt、粗体和红色。您可以通过
widget->setStyleSheet()

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


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

您可以将QLabel子类化,并完全丢弃其所有鼠标事件(以便它们到达父对象)。 然后装入QPushButton,在其上设置布局,并在此布局中插入带有格式化文本的QLabel。您将获得一个包含QLabel且可单击的按钮。(任何Qt小部件都可以设置布局,包括您从未预料到的布局设置。)

注意:
我的答案是受@ПъъПъПъъъПъъПъъъПъъ109

您可以子类化
QPushButton
,并为其提供两个私有字段:

  • self.\uu lbl
    :保存富文本的
    QLabel()
    实例。它的背景是透明的,不捕捉鼠标事件
  • self.\uu-lyt
    :一个
    QHBoxLayout()
    来固定标签。布局边距设置为零,以便标签的边框与按钮的边框相接触。换句话说:我们确保标签与按钮的大小完全相同,并且位于按钮的正上方
最后,您必须重写
setText()
方法,以便文本最终出现在标签中而不是按钮中

class RichTextButton(QPushButton):
定义初始化(self,parent=None,text=None):
如果父项不是无:
super()。\uuuu init\uuuu(父级)
其他:
super()。\uuuu init\uuuuu()
self.\uu lbl=QLabel(self)
如果文本不是无:
self.u lbl.setText(文本)
self.\uuu lyt=QHBoxLayout()
self.u_ulyt.setContentsMargins(0,0,0,0)
自我分析设置间距(0)
self.setLayout(self.\u\t)
self.u lbl.setAttribute(Qt.WA_半透明背景)
self.\uu lbl.setAttribute(Qt.WA\u TransparentForMouseEvents)
自我设定策略(
QSizePolicy.正在扩展,
QSizePolicy.正在扩展,
)
self.u lbl.setTextFormat(Qt.RichText)
self.\u lyt.addWidget(self.\u lbl)
返回
def setText(self,text):
self.u lbl.setText(文本)
self.updateGeometry()
返回
def sizeHint(自身):
s=QPushButton.sizeHint(自)
w=自我。uu lbl.sizeHint()
s、 setWidth(w.width())
s、 设置高度(w.高度()
返回s

我在网上读过,但不知道该怎么办。你能添加一些细节吗?老实说,我不明白这里写的是什么,但尝试从你的类而不是QPushButton实例化,但它没有做任何更改。我会避免自定义绘制,因为它会干扰样式,按钮大小等。纳雷克:你试过使用Qt样式表吗?子类化和自定义绘图在这方面做得太多了,没有什么不能通过样式表完成的。这对于文本样式设计来说太多了,但当整个按钮都需要样式时,这是一个非常好的起点。谢谢这个解决方案似乎对我很有效!我必须执行QWidget::setAttribute(Qt::WA_transparentbackground)来删除标签的背景,并使用QWidget::setAttribute(Qt::WA_TransparentForMouseEvents)来导致忽略鼠标事件。(我想我可以对标签进行子类化,修改它的事件处理程序或其他什么来实现这一点,但我想前面提到的widget属性已经足够好了。)此外,我还必须给按钮的布局留一个小的左边距(可能还需要一个右边距?),并将顶部和底部的边距调零,以使文本正确对齐。我可能有点晚了。也许这个链接会对某些人有所帮助。:)