C++ Qt-QPushButton文本格式
我有一个QPushButton,上面有一个文本和图标。我想把按钮上的文字改成粗体和红色。看看其他论坛,谷歌搜索,我失去了希望。如果按钮有一个图标(当然,如果你没有创建一个新图标,即文本+以前的图标),那么似乎没有办法做到这一点。这是唯一的办法吗?有人有更好的主意吗?您创建了“QPushbutton”的子类,然后覆盖绘制事件, 在这里,您可以根据自己的意愿修改文本 在这里C++ Qt-QPushButton文本格式,c++,qt,formatting,button,C++,Qt,Formatting,Button,我有一个QPushButton,上面有一个文本和图标。我想把按钮上的文字改成粗体和红色。看看其他论坛,谷歌搜索,我失去了希望。如果按钮有一个图标(当然,如果你没有创建一个新图标,即文本+以前的图标),那么似乎没有办法做到这一点。这是唯一的办法吗?有人有更好的主意吗?您创建了“QPushbutton”的子类,然后覆盖绘制事件, 在这里,您可以根据自己的意愿修改文本 在这里 class button : public QPushButton { Q_OBJECT public:
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属性已经足够好了。)此外,我还必须给按钮的布局留一个小的左边距(可能还需要一个右边距?),并将顶部和底部的边距调零,以使文本正确对齐。我可能有点晚了。也许这个链接会对某些人有所帮助。:)