gpt4 book ai didi

c++ - 如何在 QGraphicsRectItem 中实现信号槽?子类化 qobject 和 qgraphicsrectitem 但出现错误

转载 作者:行者123 更新时间:2023-11-28 04:29:43 31 4
gpt4 key购买 nike

我正在从 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com