【问题标题】:Two colours text in QPushButtonQPushButton 中的两种颜色文本
【发布时间】:2015-01-07 06:15:42
【问题描述】:

我需要一个 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>");

有什么办法吗?

非常感谢。

【问题讨论】:

  • 在QtCreator中,进入设计模式,进入属性子视图,向下滚动,你可以在某处改变对齐方式
  • 好的,试试看:

    Button

    1

    还是同样的问题?
  • 谢谢,但该解决方案也不起作用。相同的代码在 QLabel 中完美运行。 :(

标签: c++ qt qt4 qpushbutton qtextdocument


【解决方案1】:

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

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,具有旋转和富文本支持。

【讨论】:

    【解决方案2】:

    您可以从 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");
        }
    };
    

    【讨论】:

      【解决方案3】:

      关于这个有一个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();
      

      【讨论】:

        猜你喜欢
        • 2017-12-14
        • 1970-01-01
        • 1970-01-01
        • 2011-09-24
        • 2014-08-30
        • 2020-12-15
        • 2020-08-26
        相关资源
        最近更新 更多