首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不调用paintEvent方法的

不调用paintEvent方法的
EN

Stack Overflow用户
提问于 2017-07-17 10:29:01
回答 1查看 127关注 0票数 1

我的应用程序使用两个类,因此有两个类“file”,第一类显示按钮等等。第二类绘制矩形,在按键上应该改变某些矩形的颜色(通过重绘它们)。第二类包含paintEvent方法。程序编译的很好,然而矩形没有显示,我做了一个测试方法,应该退出应用程序,但这也不工作。

第一类(由main.cpp调用的)

代码语言:javascript
复制
 #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中创建的第二类

代码语言:javascript
复制
#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;
};

我做错了什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-17 10:53:17

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

  1. 由于您不打算使用布局,所以必须将其作为父部件传递给renderArea,以便在后者中绘制。
  2. 第二个问题是,在renderArea构造函数中,您设置的大小为40 * 40,当您在paintEvent方法中绘图时,您将从该空间中绘制出来。

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

代码语言:javascript
复制
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);

代码语言:javascript
复制
renderArea::renderArea(QWidget *parent) : QWidget(parent)
{
    setAutoFillBackground(true);
}

截图:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45141819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档