C++ 未绘制QToolButton上的文本

C++ 未绘制QToolButton上的文本,c++,qt,user-interface,button,C++,Qt,User Interface,Button,这是一个后续问题 我正在尝试一种方法,在该方法中,我将QToolButton子类化,并覆盖绘制事件,以便首先绘制一个红色矩形,然后在矩形顶部绘制文本 我的代码大部分工作,但是,按钮上的文本没有被绘制。我看了一些论坛帖子,但没有太多的内容。以下是“绘制覆盖”功能的当前版本: virtual void paintEvent(QPaintEvent *) override { QString tempText; QStylePainter p(this); QStyleOpti

这是一个后续问题

我正在尝试一种方法,在该方法中,我将QToolButton子类化,并覆盖绘制事件,以便首先绘制一个红色矩形,然后在矩形顶部绘制文本

我的代码大部分工作,但是,按钮上的文本没有被绘制。我看了一些论坛帖子,但没有太多的内容。以下是“绘制覆盖”功能的当前版本:

virtual void paintEvent(QPaintEvent *) override
{
    QString tempText;
    QStylePainter p(this);
    QStyleOptionToolButton opt;
    initStyleOption(&opt);
    tempText = opt.text;
    opt.text = QString();
    p.save();
    p.drawComplexControl(QStyle::CC_ToolButton, opt);
    p.setBrush(QColor(255,0,0,100));
    p.setPen(Qt::NoPen);
    p.drawRect(4,4,width()-8,height()-8);

    // p.setBrush(QColor(0,0,0));
    p.setPen(QColor(0,0,0));

    p.setFont(this->font());

    p.drawText(this->frameGeometry(), Qt::AlignCenter, tempText);
    p.restore();
}
目前,代码的逻辑应为:

1) 保存
opt
中包含的文本(此文本在按钮上绘制)。在我的代码中,
opt
中的文本保存在名为
testext

2) 将
opt.text
设置为空字符串

3) 绘制中间有红色矩形的按钮

4) 使用正确的对齐设置在按钮上绘制
testext
。为此,我考虑将文本绑定到按钮内的框架。但到目前为止,按钮上没有绘制文本。

根据注释,返回

“小部件相对于其父级的几何图形…”

这不是你想要的。您需要的是
QRect
,其中将呈现
QWidget
的内容。所以你可能想

p.drawText(contentsRect(), Qt::AlignCenter, tempText);


另外,您的
paintEvent
实现调用
QPainter::save
QPainter::restore
。这些操作可能非常昂贵,除非绝对必要,否则应避免使用。

注意,返回的是
“小部件相对于其父部件的几何图形…”
。你确定你不应该改用它吗?@G.M.胡曼,就是这样,我现在觉得很傻。没关系,今天学到了新东西!将其作为解决方案发布,我将接受它!非常感谢你