尝试将QGraphicsScene与自定义QGraphicsItemGroup连接

时间:2013-12-27 17:02:12

标签: qt qt5 qgraphicsview qgraphicsitem qgraphicsscene

我在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

1 个答案:

答案 0 :(得分:-1)

您是否尝试过QGraphicsItem的内置拖放切换而不是重新发明机制? QGraphicsItemGroup也应该拥有它。

Qt: qgraphicsitem drag and drop

正确设置标志,它应该可以正常工作。

希望有所帮助。