我试图在调用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
答案 0 :(得分:0)
事实证明我犯了一个非常愚蠢的错误。我在设置UI后忘了放置所说的功能。
ui->setupUi(this);
ui->LCD_widget->drawBlank();
效果更好。感谢大家的帮助!