findChild返回None与自定义小部件

时间:2013-05-02 02:56:40

标签: python qt pyqt

我已经在Python中创建了一个自定义Qt小部件,并设法在运行时将其加载到表单中,但是当我尝试使用findChild将其抓回到表单实例时,我得到了None

小部件已加载,如果我打印出表单上的名称和对象,我可以看到它:

DEBUG:root:<PyQt4.QtGui.QCheckBox object at 0x11358030>
DEBUG:root:Near_Other_Infrastructure
DEBUG:root:<PyQt4.QtGui.QCheckBox object at 0x113582B8>
DEBUG:root:photo
DEBUG:root:<imagewidget.QMapImageWidget object at 0x113586A8>

这是代码:

images = self.forminstance.findChild(QMapImageWidget)

更新

似乎这样做有效:

images = self.forminstance.findChild(QWidget, "photo")

然后返回DEBUG:root:<imagewidget.QMapImageWidget object at 0x113586A8>

虽然我真的更愿意通过类型获取控件而不使用名称。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我也有这个问题。

一个简单的解决方案是找到一个非自定义基类并进行强制转换。

Custom* ptr = dynamic_cast<QWidget*>(root->findChild<QWidget*>("MyWidgetName"));
if (ptr)
{
    //...whatever
}