gpt4 book ai didi

c++ - Qt paintevent() 未触发

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:48 24 4
gpt4 key购买 nike

每当调用 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();

工作得更好。感谢大家的帮助!

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com