c++ - QLabel paintEvent() 未在 update() 上触发
问题描述
这个问题已被多次问过,但似乎没有一个对我有用。我正在尝试在QOpenGLWidget
. 我有一个Shape
继承自的类,QLabel
并且我已经覆盖了该paintEvent
功能。
//local
#include "Shape.h"
Shape::Shape(const QColor& color, uint width, const QRect& rect, QWidget* parent) :
QLabel(parent),
m_color(color),
m_rectangle(rect),
m_width(width)
{
//One time update at creation
update(); //Doesn't work
}
void Shape::draw(const QRect& rect)
{
m_rectangle = rect;
update(); //Doesn't work
}
/*virtual*/ void Shape::paintEvent(QPaintEvent* /*event*/)
{
m_painter.begin(this);
QPen pen(m_color);
pen.setWidth(m_width);
m_painter.setPen(pen);
m_painter.drawRect(m_rectangle);
m_painter.end();
}
我正在Shape
类的 mousevents 中创建一个对象,GLWidget
并希望看到实时绘制的矩形。它看起来像这样:
/*virtual*/ void GLWidget::mousePressEvent(QMouseEvent* event)
{
m_mousePressed = true;
m_cursorPos = event->pos();
QPoint pos(((double)(m_cursorPos.x())) / width() * m_cols,
((double)(m_cursorPos.y())) / height() * m_rows);
m_selection.setTopLeft(pos);
m_selection.setBottomRight(pos);
m_rectangle.reset(new Shape(Qt::yellow, 2, m_selection, this));
}
/*virtual*/ void GLWidget::mouseMoveEvent(QMouseEvent* event)
{
if(m_mousePressed && event->type() == QEvent::MouseMove)
{
m_selection.setBottomRight(event->pos());
m_rectangle->draw(m_selection);
}
}
/*virtual*/ void GLWidget::mouseReleaseEvent(QMouseEvent* event)
{
m_mousePressed = false;
//Update one last time
m_rectangle->draw(m_selection);
}
我已经尝试调试在哪里可以看到正在创建但update() or repaint()
不工作的对象。我错过了与QLabel
事件有关的东西吗?
解决方案
推荐阅读
- python - 一次更新多个 django id
- php - 如何计算 BOOLEAN 列 MySQL
- c# - 使用 C# 设置 Excel 单元格值
- qsqlquery - 交叉播放查询
- vba - 将具有相同标题和唯一 ID 的多个 Excel 工作表合并
- angular - “画布不是构造函数”错误 - 使用带有 Angular 6 的 FabricJS
- html - 只有部分按钮可点击
- analytics - 如何在 Tealium 中配置 Vzaar 视频跟踪
- android - WebView 片段上的后退按钮 - 不会转到上一页
- python - 如何通过一个请求使用 Django 应用程序路由索引?