作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从 QGraphicsRectItem
创建对象并添加到 Qgraphicscene(scene)
。我想获取对象 (qgraphicsrectitem
) 的每个 movement(pos)
,以便我对 Qgraphicsrectitem
进行子类化。但是在这门课上我遇到了一些错误。如何在场景中更改对象位置?
错误:
'staticMetaObject' is not a member of '
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);
}
最佳答案
在你的头文件中,首先继承自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 没有意义:它已经存在并且我修改了它而不是创建一个新类。该示例有效,触发信号并显示矩形。
关于c++ - 如何在 QGraphicsRectItem 中实现信号槽?子类化 qobject 和 qgraphicsrectitem 但出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53275699/
我是一名优秀的程序员,十分优秀!