未触发绘制事件

问题描述 投票:0回答:2

我试图在调用

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
c++ qt
2个回答
1
投票

我也遇到过类似的问题。

我手动添加了小部件,但是我添加到布局中的小部件的

paintEvent
方法没有被调用。 当我为添加的小部件设置最小尺寸后,问题就解决了。


0
投票

我在设置 UI 后忘记放置上述功能。

ui->setupUi(this);
ui->LCD_widget->drawBlank();
© www.soinside.com 2019 - 2024. All rights reserved.