Двухцветный текст в QPushButton

Мне нужен QPushButton с двумя цветами в тексте. Я нашел решение с HTML-кодом в QTextDocument, и оно работает. Но мне нужно выравнивание по центру, и 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>");

введите описание изображения здесь

Любое решение?

Спасибо большое.

6

Решение

Вы можете получить из QPushButton и нарисовать текст самостоятельно через QPainter в paintEvent.

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");
}
};
3

Другие решения

В качестве обходного пути вы можете использовать метку или текстовый документ, чтобы напечатать нужный текст. Вы должны нарисовать его в растровое изображение и использовать растровое изображение на вашей кнопке:

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

Вы также можете найти толковую текстовую реализацию кнопки Вот.

Другим вариантом является использование QxtPushButton класс из libqxt. QxtPushButton widget — это расширенный QPushButton с поддержкой поворота и расширенного текста.

4

Eсть сообщение об ошибке об этом. Когда вы используете QTextDocument::drawContents, это имеет тенденцию игнорировать aligments. Чтобы заставить это работать, установите ширину текста, используя 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();
2
По вопросам рекламы [email protected]