QTool按钮上的文本未绘制
Text on QToolButton not being drawn
这是这篇文章的后续问题。
我正在尝试一种方法,其中我子类化 QToolButton 并覆盖 paint 事件,以便首先绘制一个红色矩形,然后将文本绘制在矩形的顶部。
我的代码大部分都可以工作,但是,按钮上的文本没有被绘制。我看了一些论坛帖子,但没有多少成功。以下是油漆覆盖功能的当前版本:
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
返回...
"小部件相对于其父级的几何形状...">
这实际上不是你想要的。 相反,您需要呈现QWidget
内容QRect
。 所以你可能想要...
p.drawText(contentsRect(), Qt::AlignCenter, tempText);
另外,您的paintEvent
实现调用QPainter::save
和QPainter::restore
。 这些操作可能代价高昂,除非绝对必要,否则应避免。
相关文章:
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 绘制文本问题
- SFML 2.4.2 - 绘制文本时出现分段错误
- 在 Qt C++ 中在自定义项委托上绘制文本时的性能问题
- 如何在透视视图中绘制文本
- Qt:用不同的字体绘制文本
- Linux绘制文本模式(无GUI,桌面)
- 使用Glstipple时,Oglft绘制文本
- 绘制文本和文本剪辑
- 有效地在 QPainterPath 周围绘制文本
- DirectWrite GDI 互操作:使用"IDWriteFontFace"绘制文本的简单方法
- DrawStatustext仅在后续呼叫上不在第一次呼叫上绘制文本
- SFML 在绘制文本时崩溃
- QPainter 未正确绘制文本
- 当我使用 DirectWrite 在 GDI hdc 上绘制文本时,如何设置透明背景
- 如何在 DirectWrite 中使用默认 UI 字体绘制文本
- Win32 绘制文本在重建后仍然存在
- 如何使用SKIA SKBITMAP在EGL纹理上绘制文本
- Windows 8 现代 UI 应用程序和 DirectX.如何绘制文本
- 在没有项目的情况下使用 Dev c++ 在窗口中绘制文本