2014-10-27 81 views
0

我試圖創建一個QGraphicsEllipseItem的子類,所以我可以添加一些功能。但是,即使是非常基本的測試,子類對象也不會顯示在場景中。在以下代碼中,僅顯示(-30,0)處的藍色圓圈,但不顯示(30,0)處的紅色圓圈。我究竟做錯了什麼?Qt QGraphicsEllipseItem子類不顯示

在研究這個問題,我看到油漆通常覆蓋了QGraphicsItem子類,所以我試過了,只要求在myEllipseItem::paintQGraphicsEllipseItem::paint,但並沒有區別。

的main.cpp

#include "widget.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    Widget w; 
    w.show(); 
    return a.exec(); 
} 

widget.h

#ifndef WIDGET_H 
#define WIDGET_H 

#include <QWidget> 
#include <QGraphicsScene> 
#include <QGraphicsView> 
#include <QGraphicsItem> 

class Widget : public QWidget 
{ 
    Q_OBJECT 
public: 
    Widget(QWidget *parent = 0); 
    ~Widget(); 
private: 
    QGraphicsScene* scene; 
}; 

class myEllipseItem : public QGraphicsEllipseItem 
{ 
public: 
    myEllipseItem(float a, float b, float c, float d) {QGraphicsEllipseItem(a,b,c,d);} 
}; 

#endif // WIDGET_H 

widget.cpp

#include "widget.h" 

#include <QLayout> 

Widget::Widget(QWidget *parent) 
    : QWidget(parent) 
{ 
    scene = new QGraphicsScene(); 

    QGraphicsEllipseItem* qIcon = new QGraphicsEllipseItem(0.0, 0.0, 20.0, 20.0); 
    qIcon->setBrush(QBrush(Qt::blue)); 
    scene->addItem(qIcon); 
    qIcon->setPos(-30,0); 

    myEllipseItem* myIcon = new myEllipseItem(0.0, 0.0, 20.0, 20.0); 
    myIcon->setBrush(QBrush(Qt::red)); 
    scene->addItem(myIcon); 
    myIcon->setPos(30,0); 

    QGraphicsView* view = new QGraphicsView(); 
    view->setScene(scene); 
    QGridLayout *layout = new QGridLayout; 
    layout->addWidget(view); 
    setLayout(layout); 

} 

Widget::~Widget() 
{ 
} 

回答

1

你的構造是不正確的。您應該使用下一個(在我的例子有空的身體,但你可以做所有需要的東西):

頭:

#ifndef MYELLIPSEITEM_H 
#define MYELLIPSEITEM_H 

#include <QGraphicsEllipseItem> 

class myEllipseItem : public QGraphicsEllipseItem 
{ 
public: 
    myEllipseItem(float a, float b, float c, float d): QGraphicsEllipseItem(a,b,c,d){} 
}; 

#endif // MYCOLORDIALOG_H 

正如你所看到的,我使用單獨的頭文件。另一個例子如何使用構造函數的主體:

myEllipseItem(float a, float b, float c, float d): QGraphicsEllipseItem(a,b,c,d) 
{ 
    this->setBrush(QBrush(Qt::green)); 
} 

現在橢圓有「默認」顏色 - 綠色。

+0

哈,這樣做!我沒有意識到需要從初始化列表中調用父構造函數,謝謝! – 2014-10-27 19:14:54

+0

@TSloane不客氣:) – Chernobyl 2014-10-27 19:16:41