【发布时间】:2014-01-15 06:43:04
【问题描述】:
我有一个 Qt 项目,它有一个带有 QGraphicsView 的 GUI。然后,我有一个名为“GraphicsScene”的类,它是“QGraphicsScene”的子类。之后,我有一个名为“Entidade”的类,它是“QGraphicsItemGroup”的子类。
当我单击 GraphicsView 时,我添加了一个新项目“Entidade”。我想控制 GraphicsView 上项目的移动,为此我在 'Entidade.h' 上创建了一个名为 movable 的布尔变量和一个名为 void setMovable(bool toggled) 的插槽。因此,当操作为“真”时,我可以移动项目,否则(例如,选择其他操作),无法移动项目。
在“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 新类”创建它,类型信息字段为“None”)
有人知道怎么解决吗?
P.S.:如果需要更多信息,请询问。 =D
【问题讨论】:
标签: qt qt5 qgraphicsview qgraphicsitem qgraphicsscene