Этот вопрос задавался несколько раз, но ни один из них, похоже, не работал для меня.Я пытаюсь нарисовать несколько изменяемых / подвижных прямоугольников на 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
в мышиных событиях класса 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
событиями?