【问题标题】:Trying to connect QGraphicsScene with custom QGraphicsItemGroup尝试将 QGraphicsScene 与自定义 QGraphicsItemGroup 连接
【发布时间】: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


    【解决方案1】:

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

    Qt: qgraphicsitem drag and drop

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

    希望对您有所帮助。

    【讨论】:

    • 感谢您的回答。标志没问题(ItemIsMovable 和 ItemIsSelectable),我正在尝试控制它应该何时发生。
    • 您是否尝试过在场景中创建一个槽,以便在必要时更改标志?
    • 答案中的问题,grr...这些更适合cmets。
    猜你喜欢
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多