我在Qt上有一个项目,它有一个带有QGraphicsView的GUI。然后,我有一个名为'GraphicsScene'的类,它是'QGraphicsScene'的子类。之后,我有一个名为'Entidade'的类,它是'QGraphicsItemGroup'的子类。
当我点击GraphicsView时,我添加了一个新项目'Entidade'。我想在GraphicsView上控制项目的移动,为此我在'Entidade.h'上创建了一个名为movable
的bool变量和一个名为void setMovable(bool toggled)
的插槽。因此,当动作为“true”时,我可以移动项目,否则(例如,选择其他动作),无法移动项目。
在类'GraphicsScene'上,我创建了一个名为void setMovable(bool toggled)
的信号。
所以,我试过这个:
MainWindow.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:\QTProjects\fcTables\graphicsscene.cpp:63: error: no matching function for call to 'GraphicsScene::connect(GraphicsScene* const, const char*, Entidade*&, const char*)'
entidade, SLOT(setMovable(bool)));
^
接下来是这个:
C:\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtCore\qobject.h:214: error: no type named 'Object' in 'struct QtPrivate::FunctionPointer<const char*>'
我认为它发生'因为类'Entidade'不是QObject的子类(使用'Qt new class'创建它,类型信息字段是'None')
有人知道如何解决?
P.S。:如果需要更多信息,请提出要求。 = d
答案 0 :(得分:-1)
您是否尝试过QGraphicsItem
的内置拖放切换而不是重新发明机制? QGraphicsItemGroup
也应该拥有它。
Qt: qgraphicsitem drag and drop
正确设置标志,它应该可以正常工作。
希望有所帮助。