Qt QGraphicsEllipseItem子类不显示

时间:2014-10-27 17:44:11

标签: c++ qt class

我正在尝试创建QGraphicsEllipseItem的子类,以便添加一些功能。但是,即使是非常基本的测试,子类对象也不会显示在场景中。在以下代码中,仅显示(-30,0)处的蓝色圆圈,而不显示(30,0)处的红色圆圈。我究竟做错了什么?

在研究这个问题时,我发现QGraphicsItem子类通常会覆盖绘制,所以我尝试过,只调用QGraphicsEllipseItem::paint中的myEllipseItem::paint,但没有区别。< / p>

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 个答案:

答案 0 :(得分:1)

您的构造函数不正确。你应该使用next(在我的例子中它有空体,但你可以做所有需要的东西):

头:

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

现在椭圆有&#34;默认&#34;颜色 - 绿色。