2017-07-17 24 views
0

我的應用程序使用兩個類,因此有2個類「文件」,第一類顯示按鈕等。第二類繪製矩形,按下按鈕應改變某些矩形的顏色(通過重繪它們)。第二類包含paintEvent方法。該程序編譯罰款,但矩形不顯示,我做了一個測試方法,應該退出應用程序,但也不工作。
頭等艙(一個由main.cpp中調用)不調用paintEvent方法的類

#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; 
}; 

我在做什麼錯?
感謝

+0

不應該'RCcar'小部件是'renderArea'小部件的父級?也許你應該這樣做? –

回答

1

在代碼中有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已經調用,但在不適當的空間吸引了。

+0

第二個錯誤是一個錯字,但是我現在得到它的工作謝謝 – lulz