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

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


构造函数对于LCDui类而言工作正常,并绘制了一个黑色的小部件,但是在调用drawBlank()方法时,该小部件不会重新绘制。我想念什么?谢谢您的帮助!这是LCDui类和实现:

编辑

我将其范围缩小到小部件本身未更新的事实。如果我执行mLCD-> show();出现带有正确图像的新窗口,然后我可以正常使用该窗口。但是,我要更新的小部件未更新。此小部件已升级为LCDui类。

结束编辑

液晶显示器

#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();


效果更好。感谢大家的帮助!

关于c++ - Qt PaintEvent()未触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33375829/

10-11 20:22