【发布时间】:2019-12-04 23:04:17
【问题描述】:
这是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。为此,我正在考虑将文本绑定到按钮内的框架。但到目前为止,按钮上还没有绘制任何文字。
【问题讨论】:
-
请注意
QWidget::frameGeometry返回"geometry of the widget relative to its parent..."。您确定不应该改用QWidget::contentsRect吗? -
@G.M.哦,伙计,就是这样,我现在觉得很傻。没关系,今天学到了新东西!将其发布为解决方案,我会接受!非常感谢
标签: c++ qt user-interface button