我有一个从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的构造函数并保存它是一个好方法吗?
提前致谢:)
答案 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()搜索对象树并搜索您的窗口小部件。