QLabel paintEvent () не запускается при обновлении () - PullRequest
0 голосов
/ 24 мая 2018

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

...