gpt4 book ai didi

c++ - 类不调用 paintEvent 方法

转载 作者:行者123 更新时间:2023-11-30 05:11:17 26 4
gpt4 key购买 nike

我的应用程序使用两个类,因此有两个类"file",第一类显示按钮等。第二类绘制矩形,并且在按键时应该改变某些矩形的颜色(通过重绘它们)。第二类包含 paintEvent 方法。该程序编译正常,但矩形不显示,我制作了一个应该退出应用程序的测试方法,但这也不起作用。
第一类(被main.cpp调用的)

 #include "RCcar.h"
#include "renderArea.h"
#include <QPushButton>
#include <QApplication>
RCcar::RCcar()
{
Renderarea = new renderArea;
Renderarea->test();
//Renderarea->update();
exit = new QPushButton("Exit", this);
exit->setGeometry(410, 440, 80, 50);
connect(exit, SIGNAL(released()), QApplication::instance(), SLOT(quit()));
setFixedSize(500, 500);
}
#pragma once

#include <QWidget>
class QPushButton;
class renderArea;
class RCcar : public QWidget
{
Q_OBJECT

public:
RCcar();
private:
QPushButton *exit;
renderArea *Renderarea;
};

在 RCcar 类中创建的第二个类

#include "renderArea.h"
#include <QPainter>
#include <QApplication>
#include <QPushButton>
renderArea::renderArea(QWidget *parent)
: QWidget(parent)
{

setAutoFillBackground(true);
setFixedSize(40, 40);
//this->update();
}
void renderArea::paintEvent(QPaintEvent*) {
QPainter painter(this);
QRect a = QRect(90, 230, 70, 40);
QRect s = QRect(215, 230, 70, 40);
QRect d = QRect(340, 230, 70, 40);
QRect w = QRect(215, 150, 70, 40);
painter.setPen(Qt::black);
painter.drawText(a, Qt::AlignCenter, "a");
painter.drawText(s, Qt::AlignCenter, "s");
painter.drawText(d, Qt::AlignCenter, "d");
painter.drawText(w, Qt::AlignCenter, "w");
painter.drawRect(a);
painter.drawRect(s);
painter.drawRect(d);
painter.drawRect(w);
}
void renderArea::test() {
QApplication::instance()->quit();
}
#pragma once
#include <QWidget>
class QPushButton;
class renderArea : public QWidget
{
Q_OBJECT
public:
enum Keys {w,a,s,d};
renderArea(QWidget *parent=0);
void test();
protected:
void paintEvent(QPaintEvent *event) override;
private:
Keys keys;
QPushButton *button;
};

我做错了什么?
谢谢

最佳答案

在您的代码中有 2 个错误:

  1. 由于您不打算使用布局,因此您必须将 renderArea 小部件作为父级传递给它,以便在后者中绘制它。

  2. 第二个是,在 renderArea 构造函数中,您将大小设置为 40 * 40,当您在 paintEvent 方法中绘制时,您正在绘制那个空间。

更正作为父项传递给 this 并设置适当的大小。

Renderarea = new renderArea(this);
Renderarea->setGeometry(0, 0, 500, 400);
exit = new QPushButton("Exit", this);
exit->setGeometry(410, 440, 80, 50);
connect(exit, SIGNAL(released()), QApplication::instance(), SLOT(quit()));
setFixedSize(500, 500);

并删除 setFixedSize(40, 40); 行:

renderArea::renderArea(QWidget *parent) : QWidget(parent)
{
setAutoFillBackground(true);
}

截图:

enter image description here

注意:已调用 paintEvent 方法但在不适当的空间中绘制。

关于c++ - 类不调用 paintEvent 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45141819/

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