我在Qt上有一个项目,它有一个带有QGraphicsView的GUI。然后,我有一个名为"GraphicsScene"的类,它是"QGraphicsScenne"的子类。之后,我有一个名为"Entidade"的类,它是"QGraphicsItemGroup"的子类。
当我点击GraphicsView时,我添加了一个新的"Entidade"项目。我想控制GraphicsView上项目的移动,为此我在Entidade.h上创建了一个名为movable
的bool变量和一个称为void setMovable(bool toggled)
的slot。因此,当操作为"true"时,我可以移动项目,否则(例如,选择了其他操作),无法移动项目。
在"GraphicsScene"类中,我创建了一个名为void setMovable(bool toggled)
的信号。
所以,我尝试了这个:
主窗口.cpp
connect(ui->actionMover, SIGNAL(toggled(bool)),
graphicsScene, SIGNAL(setMovable(bool)));
GraphicsScene.cpp
connect(this, SIGNAL(setMovable(bool)),
entidade, SLOT(setMovable(bool))); //entidade is a item to add to graphicsview
Entidade.h
class Entidade : public QGraphicsItemGroup
{
public:
Entidade();
Entidade(qreal x, qreal y, qreal w, qreal h);
private:
bool movable; //variavel para controlar o mover.
QGraphicsRectItem *entidade;
QGraphicsSimpleTextItem *texto;
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
public slots:
void setMovable(bool toggled);
};
在这一点上,当我试图运行该项目时,会出现以下错误:
E:QTProjectsfcTablesgraphicsscene.cpp:63: error: no matching function for call to 'GraphicsScene::connect(GraphicsScene* const, const char*, Entidade*&, const char*)'
entidade, SLOT(setMovable(bool)));
^
然后是这个:
C:QtQt5.1.15.1.1mingw48_32includeQtCoreqobject.h:214: error: no type named 'Object' in 'struct QtPrivate::FunctionPointer<const char*>'
我认为这是因为类"Entidade"不是QObject的子类(使用"Qt new class"创建它,类型信息字段为"None")
有人知道怎么解决?
附言:如果需要更多信息,请询问。=D
您是否尝试过QGraphicsItem
的内置拖放切换,而不是重新设计机制?QGraphicsItemGroup
也应该拥有它。
Qt:图形项目拖放
正确设置标志,它应该可以工作。
希望能有所帮助。