Qt paintevent() not triggered

Qt paintevent() not triggered

本文关键字:not triggered paintevent Qt      更新时间:2023-10-16

每当调用repaint()时,我都试图重新绘制小部件,但由于某些原因,它不会触发paintevent()。例如,当我做这样的事情时:

mLCD = new LCDui();
mLCD->drawBlank();

构造函数对于LCDui类工作得很好,并绘制了一个黑色小部件,但当调用drawBlank()方法时,小部件不会重新绘制。我错过了什么?谢谢你的帮助!以下是LCDui类和实现:

编辑

我已经把它缩小到小部件本身没有更新的事实。如果我做mLCD->show();此时会出现一个带有正确图像的新窗口,然后我可以正常使用它。但是,我想要更新的小部件没有更新。这个小部件被提升为LCDui类。

结束编辑

lcdui.cpp

#include "lcdui.h"
#include <QPainter>
#include <QPaintEvent>
#include <QRgb>
LCDui::LCDui(QWidget *parent) : QWidget(parent)
{
    image = new QImage(320,240,QImage::Format_RGB32);
    image->fill(qRgb(0,0,0));
}
LCDui::~LCDui()
{
    delete image;
    image = NULL;
}
void LCDui::paintEvent(QPaintEvent * /*event*/)
{
    QPainter painter(this);
    painter.drawImage(QPoint(0,0),*image);
}
void LCDui::drawBlank()
{
    image->fill(qRgb(255,255,255));
    this->repaint();
}

lcdui.h:

#ifndef LCDUI_H
#define LCDUI_H
#include <QWidget>
#include <QImage>
class LCDui : public QWidget
{
Q_OBJECT
public:
    explicit LCDui(QWidget *parent = 0);
    ~LCDui();
    void drawBlank();
protected:
    virtual void paintEvent(QPaintEvent * /*event*/);
private:
    QImage *image;
};
#endif // LCDUI_H

所以我犯了一个非常愚蠢的错误。我在设置UI后忘记放置上述功能。

ui->setupUi(this);
ui->LCD_widget->drawBlank();

效果好多了。谢谢大家的帮助!

我也遇到过类似的问题。

我手动添加了小部件,但没有调用我添加到布局的小部件的paintEvent方法。在我为添加的小部件设置了最小大小后,问题就解决了。