QPushButton中的两种颜色文本

6

我需要一个带有两种颜色文本的QPushButton。我找到了一种在QTextDocument中使用html代码的解决方案,而且它起作用了。但是我需要居中对齐,而html代码不起作用。

 QTextDocument Text;
  Text.setHtml("<p align=center><font>Button</font><br/><font color=yellow>1</font></p>");

   QPixmap pixmap(Text.size().width(), Text.size().height());
   pixmap.fill( Qt::transparent );
   QPainter painter(&pixmap);
   Text.drawContents(&painter, pixmap.rect());

   QIcon ButtonIcon(pixmap);
   ui->toolButton->setText("");
   ui->toolButton->setIcon(ButtonIcon);
   ui->toolButton->setIconSize(pixmap.rect().size());

我明白了,要翻译的内容是关于IT技术的。这段文字的意思是:我得到了enter image description here,而且同样的HTML代码在QLabel中可以工作。

ui->label->setText("<p align=center><font>Label</font><br/><font color=yellow>1</font></p>");

输入图像描述

有什么解决方案吗?

非常感谢。


在QtCreator中,进入设计模式,转到属性子视图并向下滚动,您可以在那里更改对齐方式。 - msrd0
好的,尝试一下这个:<p align="center"><font>按钮</font></p><p align="center"><font color="yellow">1</font></p> 问题还是一样吗? - Jablonski
谢谢,但是那个解决方案也不起作用。相同的代码在QLabel中完美运行。:( - ChavesJM
3个回答

4

作为一种解决方法,您可以使用标签或文本文档来打印所需的文本。您应该将其绘制到一个pixmap上,并在按钮上使用该pixmap:

QPushButton *button = new QPushButton(this);
QTextDocument Text;
Text.setHtml("<h2><i>Hello</i> ""<font color=red>Qt!</font></h2>");

QPixmap pixmap(Text.size().width(), Text.size().height());
pixmap.fill( Qt::transparent );
QPainter painter( &pixmap );
Text.drawContents(&painter, pixmap.rect());

QIcon ButtonIcon(pixmap);
button->setIcon(ButtonIcon);
button->setIconSize(pixmap.rect().size());

您还可以在此处找到一个丰富的富文本推送按钮实现。

另一种选择是使用来自libqxt的QxtPushButton类。 QxtPushButton小部件是带有旋转和富文本支持的扩展QPushButton。


3
您可以从QPushButton派生,并通过paintEvent中的QPainter自行绘制文本。
class Button : public QPushButton
{
Q_OBJECT

public:
Button(QWidget *parent = 0)
: QPushButton(parent)
    { }

void paintEvent(QPaintEvent *p)
    {
        QPushButton::paintEvent(p);
        QPainter paint(this);
        paint.drawText(QPoint(10,10),"Hello");
    }
};

2

关于这个问题有一个错误报告。当你使用QTextDocument::drawContents时,它往往会忽略对齐方式。为了让它正常工作,请使用QTextDocument::setTextWidth设置文本宽度。

QTextDocument doc;
doc.setHtml("<p align=center><font>Button</font><br/><font color=red>1</font></p>");
doc.setTextWidth(doc.size().width());

QPixmap pixmap(doc.size().width(), doc.size().height());
pixmap.fill( Qt::transparent );
QPainter painter(&pixmap);
doc.drawContents(&painter);

QPushButton button;
button.setIconSize(pixmap.size());
button.setIcon(pixmap);
button.show();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接