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

我得到,在此处输入图像描述

相同的代码 HTML 在 QLabel 中工作

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

在此处输入图像描述

有什么解决办法吗?

非常感谢。

4

3 回答 3

4

作为解决方法,您可以使用标签或文本文档来打印您想要的文本。您应该将其绘制到像素图并在按钮上使用像素图:

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。

于 2014-11-11T07:09:15.610 回答
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");
    }
};
于 2014-11-12T14:31:57.433 回答
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();
于 2014-11-11T07:29:05.053 回答