将信号从QGraphicsItem连接到QGraphicView的最佳方法

时间:2016-05-03 12:22:31

标签: qt qgraphicsview qgraphicsitem

我有一个从QGraphicsView继承的小部件,如下所示:

class MyWidget : public QGraphicsView
{
  Q_OBJECT

  public:
    MyWidget(QWidget *parent);
  ...
  signal:
    mySignal();
}

这个QGraphicsView有一个场景,场景添加了从QGraphicsObject继承的(自定义)项目,以便实现信号/插槽:

class CustomItem : public QGraphicsObject
{
    Q_OBJECT

public:
    CustomItem();

    QVariant itemChange(GraphicsItemChange change, const QVariant &value);
    void focusInEvent(QFocusEvent *event);
    void focusOutEvent(QFocusEvent *event);
    ...
signal:
    void itemSignal();
}

当项目处于焦点时,我想连接到MyWidget的mySignal,如下所示:

void CustomItem::focusInEvent(QFocusEvent *event)
{
    connect(this, SIGNAL(itemSignal()), ???,SIGNAL(mySignal()));
}

正如你所看到的,我已经用问号填充了指向MyWidget的指针,因为我不确定获取指针的最佳方法是什么。我已经尝试通过文档来查看该项是否继承任何方法或类似的获取其QGraphicsView,但我还没有找到任何东西。将MyWidget的this指针传递给CustomItem的构造函数并保存它是一个好方法吗?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

一个提示:您需要将信号itemSignal()与相应的插槽连接

MyWidget widget;
QObject::connect( this, &CustomItem::itemSignal, &widget, &MyWidget::itemSlot );
// or for older Qt-versions
QObject::connect( this, SIGNAL(itemSignal(), &widget, SLOT( itemSlot ) );

当您没有指向窗口小部件的指针时,您可以通过QGraphicsView :: items()搜索对象树并搜索您的窗口小部件。