I use C++, Qt 4.8.7, Visual Studio in order to create GUI-based application. I have to add some checkable buttons, which contain captions with subcripts. I use 3rd party buttons from github, see richtextpushbutton.h and richtextpushbutton.cpp. The default look of the checked QPushButton
looks awful (unreadable), I'd like to change its background in the checked state. How can I change the following methods in order to override background color of this HTML-supporting button for the checked state (when isRichText
is true and false)? I've met only examples for simple QPushButton
descendants (without QTextDocument
).
void RichTextPushButton::paintEvent(QPaintEvent *event)
{
if (isRichText) {
QStylePainter p(this);
QRect buttonRect = rect();
QPoint point;
QTextDocument richTextLabel;
richTextLabel.setHtml(htmlText);
QPixmap richTextPixmap(richTextLabel.size().width(), richTextLabel.size().height());
richTextPixmap.fill(Qt::transparent);
QPainter richTextPainter(&richTextPixmap);
richTextLabel.drawContents(&richTextPainter, richTextPixmap.rect());
if (!icon().isNull())
point = QPoint(buttonRect.x() + buttonRect.width() / 2 + iconSize().width() / 2 + 2, buttonRect.y() + buttonRect.height() / 2);
else
point = QPoint(buttonRect.x() + buttonRect.width() / 2 - 1, buttonRect.y() + buttonRect.height() / 2);
buttonRect.translate(point.x() - richTextPixmap.width() / 2, point.y() - richTextPixmap.height() / 2);
p.drawControl(QStyle::CE_PushButton, getStyleOption());
p.drawPixmap(buttonRect.left(), buttonRect.top(), richTextPixmap.width(), richTextPixmap.height(),richTextPixmap);
} else
QPushButton::paintEvent(event);
}
QStyleOptionButton RichTextPushButton::getStyleOption() const
{
QStyleOptionButton opt;
opt.initFrom(this);
opt.features = QStyleOptionButton::None;
if (isFlat())
opt.features |= QStyleOptionButton::Flat;
if (menu())
opt.features |= QStyleOptionButton::HasMenu;
if (autoDefault() || isDefault())
opt.features |= QStyleOptionButton::AutoDefaultButton;
if (isDefault())
opt.features |= QStyleOptionButton::DefaultButton;
if (isDown() || (menu() && menu()->isVisible()))
opt.state |= QStyle::State_Sunken;
if (isChecked())
opt.state |= QStyle::State_On;
if (!isFlat() && !isDown())
opt.state |= QStyle::State_Raised;
if (!isRichText)
opt.text = QPushButton::text();
opt.icon = icon();
opt.iconSize = iconSize();
return opt;
}