首页 > 解决方案 > 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事件有关的东西吗?

标签: c++qtqlabel

解决方案


推荐阅读