我需要一个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>");
任何解决方案?
非常感谢。
答案 0 :(得分: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());
您还可以找到富文本按钮实现here。
另一种选择是使用libqxt中的QxtPushButton类。 QxtPushButton
小部件是一个扩展的QPushButton,具有旋转和富文本支持。
答案 1 :(得分: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 :(得分:2)
有一个bug report。当您使用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();