如何在Qt上访问父部件?

7

我有一个继承自QTreeWidget的类(称为PackList),其父类是KXmlGuiWindow。 如何访问父类的槽函数?

我尝试从QTreeWidget类中使用getParent()->mySlot(),但是出现了以下错误:

error: no matching function for call to 'PackList::mySlot()'

有人知道正确的方法吗?谢谢

2个回答

15

如果你知道父类,你将不得不将parentWidget()强制转换为该类,然后调用你的槽函数。请记住,在这种情况下,无论是否是槽函数都没有区别。你只是在调用一个方法。

((KXmlGuiWindow*)parentWidget())->mySlot();

通过将信号与插槽连接,您可以在不使用转换的情况下进行调用。

connect( this, SIGNAL(mySignal()), parentWidget(), SLOT(mySlot()) );

最后,如果你不想强制转换类型,你可以使用QMetaObject::invokeMethod来调用它。但这可能有点过头了。


这是正确的做法。我已经使用了没有类型转换的 parentWidget())->setEnabled();,并且我重写了父类的 setEnabled 函数。然后,我的修改没有起作用。后来我意识到这是一个愚蠢的错误,但我认为这可能是许多同行会浪费时间的一个点。无论如何,请不要忘记类型转换。 - meakgoz

1

我不确定我完全理解你的问题。

然而,你可以使用parentWidget()访问一个控件的父级窗口。

那么,你就能调用任何公共插槽:

parentWidget()->a_slot();

解决方法是在父级中连接事件,而不是在packList中。 - JuanDeLosMuertos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接