Two colours text in QPushButton

后端 未结 3 425
失恋的感觉
失恋的感觉 2020-12-20 21:06

I need a QPushButton with two colors in the text. I found a solution with a html code in QTextDocument and it\'s working. But I need center align and the html code isn\'t wo

相关标签:
3条回答
  • 2020-12-20 21:18

    There is a bug report about this. When you use QTextDocument::drawContents, it tends to ignore the aligments. To make it work, set the text width using 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();
    
    0 讨论(0)
  • 2020-12-20 21:21

    You can derive from QPushButton and draw text yourself via QPainter in 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");
        }
    };
    
    0 讨论(0)
  • 2020-12-20 21:27

    As s workaround you can use a label or text document to print the text you want. You should paint it to a pixmap and use the pixmap on your button :

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

    You can also find a rich text push button implementation here.

    An other option is to use QxtPushButton class from libqxt. QxtPushButton widget is an extended QPushButton with rotation and rich text support.

    0 讨论(0)
提交回复
热议问题