我正在从QGraphicsRectItem创建对象并添加到Qgraphicscene(scene)中。我希望得到每个对象的movement(pos) (qgraphicsrectitem),以便子类Qgraphicsrectitem。但是在这节课上,我遇到了一些错误。如何在场景中改变物体的位置?
错误:
'staticMetaObject‘不是'
QGraphicsRectItem’(&QGraphicsRectItem::staticMetaObject,qt_meta_stringdata_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);
};ItemHandler.cpp
#include "itemhandler.h"
ItemHandler::ItemHandler(QGraphicsItem *parent) : QGraphicsRectItem(parent)
{
setFlag(QGraphicsItem::ItemSendsGeometryChanges);
}
ItemHandler::~ItemHandler()
{
}
QVariant ItemHandler::itemChange(QGraphicsItem::GraphicsItemChange change,
const QVariant &value)
{
QPointF newPos = value.toPointF();
emit objectHandlePosChanged(newPos);
}发布于 2018-11-13 08:38:15
在头文件中,首先从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);
};这是我的测试主要功能(抱歉,它只是一个沙箱):
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();
}我只是使用了一个没有显示的空MainWindow来连接到信号,没有必要使用MainWindow:它已经在那里了,我修改了它,而不是创建一个新的类。该示例工作正常,触发信号并显示矩形。
https://stackoverflow.com/questions/53275699
复制相似问题