Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QPushButton中的双色文本_C++_Qt_Qt4_Qpushbutton_Qtextdocument - Fatal编程技术网

C++ QPushButton中的双色文本

C++ QPushButton中的双色文本,c++,qt,qt4,qpushbutton,qtextdocument,C++,Qt,Qt4,Qpushbutton,Qtextdocument,我需要一个文本中有两种颜色的QPushButton。我在QTextDocument中找到了一个带有html代码的解决方案,它正在运行。但我需要中心对齐,html代码无法工作 QTextDocument Text; Text.setHtml("<p align=center><font>Button</font><br/><font color=yellow>1</font></p>"); QPixm

我需要一个文本中有两种颜色的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());
qtext文档文本;
setHtml(“

按钮
1

”; QPixmap pixmap(Text.size().width(),Text.size().height()); pixmap.fill(Qt::透明); QPainter painter(油漆工)和pixmap; Text.drawContents(&painter,pixmap.rect()); QIcon按钮(pixmap); ui->toolButton->setText(“”); 用户界面->工具按钮->设置图标(按钮图标); ui->toolButton->setIconSize(pixmap.rect().size());
我得到

同样的HTML代码在QLabel中工作

ui->label->setText("<p align=center><font>Label</font><br/><font color=yellow>1</font></p>");
ui->label->setText(

label
1

”;

有解决办法吗


非常感谢。

作为解决方案,您可以使用标签或文本文档打印所需的文本。您应该将其绘制到pixmap并使用按钮上的pixmap:

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());
QPushButton*按钮=新的QPushButton(此按钮);
QTextDocument文本;
setHtml(“Hello”“Qt!”);
QPixmap pixmap(Text.size().width(),Text.size().height());
pixmap.fill(Qt::透明);
QPainter painter(油漆工)和pixmap;
Text.drawContents(&painter,pixmap.rect());
QIcon按钮(pixmap);
按钮->设置图标(按钮图标);
按钮->设置图标大小(pixmap.rect().size());
您还可以找到一个富文本按钮实现

另一个选项是使用libqxt中的类
QXTButton
小部件是一个扩展的QPushButton,具有旋转和富文本支持。

关于这一点,有很多建议。使用时,它往往会忽略对齐。要使其正常工作,请使用设置文本宽度

qtextdock;
doc.setHtml(“

按钮
1

”; doc.setTextWidth(doc.size().width()); QPixmap pixmap(doc.size().width(),doc.size().height()); pixmap.fill(Qt::透明); QPainter painter(油漆工)和pixmap; 图纸内容(和油漆工); QPushButton按钮; setIconSize(pixmap.size()); 按钮。设置图标(pixmap); 按钮。显示();
您可以从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");
    }
};

在QtCreator中,转到“设计”模式,转到“属性”子视图,然后向下滚动,您可以在其中的某个位置更改对齐方式确定,然后重试:

按钮仍然存在相同的问题?谢谢,但该解决方案也不起作用。同样的代码在QLabel中工作得很好:(

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