Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在QGraphicsRectItem中实现信号和插槽?子类qobject和QGraphicsRectiItem,但出现错误_C++_Qt_Signals Slots_Qgraphicsscene_Qgraphicsitem - Fatal编程技术网

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();

}