C++ 如何在QGraphicsRectItem中实现信号和插槽?子类qobject和QGraphicsRectiItem,但出现错误
我正在从C++ 如何在QGraphicsRectItem中实现信号和插槽?子类qobject和QGraphicsRectiItem,但出现错误,c++,qt,signals-slots,qgraphicsscene,qgraphicsitem,C++,Qt,Signals Slots,Qgraphicsscene,Qgraphicsitem,我正在从qgraphicsrecitem创建对象,并添加到qgraphicsene(场景)。 我想得到对象(qgraphicsrectitem)的每一个移动(pos),这样我就可以子类化qgraphicsrectitem。但是在这节课上我犯了一些错误。 如何在场景中更改对象位置 错误: “staticMetaObject”不是“QGraphicsRectItem”的成员 {&qgraphicsrecitem::staticMetaObject,qt\u meta\u stringdata\u I
qgraphicsrecitem
创建对象,并添加到qgraphicsene(场景)
。
我想得到对象(qgraphicsrectitem
)的每一个移动(pos)
,这样我就可以子类化qgraphicsrectitem
。但是在这节课上我犯了一些错误。
如何在场景中更改对象位置
错误:
“staticMetaObject”不是“QGraphicsRectItem
”的成员
{&qgraphicsrecitem::staticMetaObject
,qt\u meta\u stringdata\u ItemHandler.data
ItemHandler.h
#include <QObject>
#include <QGraphicsRectItem>
class ItemHandler : public QGraphicsRectItem, public QObject
{
Q_OBJECT
public:
ItemHandler(QGraphicsItem *parent = 0 );
~ItemHandler();
protected:
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
signals:
void objectHandlePosChanged(QPointF value);
};
在头文件中,首先从QObject继承,如下所示:
#include <QObject>
#include <QGraphicsRectItem>
class ItemHandler : public QObject, public QGraphicsRectItem
{
Q_OBJECT
public:
ItemHandler(QGraphicsItem *parent = 0 );
~ItemHandler();
protected:
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
signals:
void objectHandlePosChanged(QPointF value);
};
我只是使用了一个从未显示的空主窗口来连接信号,拥有一个主窗口没有任何意义:它已经在那里了,我修改了它,而不是创建了一个新的类。示例可以工作,触发信号并显示矩形。感谢您的快速回复。.我在添加到场景中后尝试了这一点,它不是sh通过调试get to know constructor赋予qObject ptr而非qgraphicsrectitem Pointer我尝试过它,它可以工作并触发objectHandlePosChanged信号。我无法提供更多帮助,除非您发布完整的工作示例等。您可以发布…创建实例并在示例中连接…2行代码我添加了一个如何创建cr的工作示例创建并连接你的ItemHandler,希望它能帮助你。下次请用一个简单的工作示例来重现这个问题。
#include <QObject>
#include <QGraphicsRectItem>
class ItemHandler : public QObject, public QGraphicsRectItem
{
Q_OBJECT
public:
ItemHandler(QGraphicsItem *parent = 0 );
~ItemHandler();
protected:
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
signals:
void objectHandlePosChanged(QPointF value);
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow* mywindow = new MainWindow();
QGraphicsScene scene;
ItemHandler *item = new ItemHandler;
item->setRect(10.0, 10.0, 10.0, 10.0);
scene.addItem(item);
QApplication::connect(item, SIGNAL(objectHandlePosChanged(QPointF)), mywindow, SLOT(moved(QPointF)));
QGraphicsView view(&scene);
view.setFixedSize(250, 250);
view.setWindowTitle("QGraphicsItem Test");
item->setPos(-100, -100);
item->setPos(-200, -200);
view.show();
return app.exec();
}