gpt4 book ai didi

c++ - 未绘制 QToolButton 上的文本

转载 作者:行者123 更新时间:2023-11-28 04:13:18 28 4
gpt4 key购买 nike

这是此 posting 的后续问题.

我正在尝试一种方法,在该方法中,我将 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 中的文本保存在一个名为 tempText

的变量中

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

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

4) 使用适当的对齐设置在按钮上绘制 tempText。为此,我正在考虑将文本绑定(bind)到按钮内的框架。但到目前为止,按钮上还没有绘制任何文字。

最佳答案

根据评论,QWidget::frameGeometry返回...

"geometry of the widget relative to its parent..."

这实际上不是您想要的。相反,您需要 QRect 来呈现 QWidget 的内容。所以你可能想要...

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

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

关于c++ - 未绘制 QToolButton 上的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57222794/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com