我正在尝试创建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()
{
}
答案 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;颜色 - 绿色。