Qt 设计器创建的 QWidget 不被识别为 QWidget

Posted

技术标签:

【中文标题】Qt 设计器创建的 QWidget 不被识别为 QWidget【英文标题】:QWidget created by Qt designer not recognized as QWidget 【发布时间】:2017-07-22 19:17:24 【问题描述】:

我使用的是 Qt Designer 4.8.7,从它开始。我创建了一个MainWindow,我想在其中加载一个布局。

我有一个小部件,由 Qt 设计器的pyuic4 生成。

我正在加载我的小部件

self.setCentralWidget(myWidget)

它会抛出这个错误:

AttributeError: 'Ui_myWidget' object has no attribute 'setObjectName'

它清楚地解释了传递的对象不被识别为QWidget。这个问题可以通过修改类定义来解决:

class Ui_myWidget(object):

class Ui_myWidget(QtGui.QWidget):

由于小部件将被更新,每次.py 将再次生成,我将不得不手动编辑。我想避免这种情况。我错过了一步吗?

【问题讨论】:

如果可能,您根本不应该编辑由pyuic4 生成的 .py 文件。相反,您在它们旁边创建一个新的 .py 文件并导入这些文件以调用小部件:from pyfilename import Ui_myWidget 这是为了测试目的。 @eyllanesc 提供的答案也解释了这一点。谢谢! 【参考方案1】:

Qt Designer 的目标是实现视图,所以它没有实现一个 QWidget,我们有责任通过一个小部件来使用那个实现,我建议这样做:

class MyWidget(QtGui.QWidget, Ui_myWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent=None)
        self.setupUi(self)

然后你创建这个类的对象并在你的其他小部件中使用它:

myWidget = MyWidget(self)
self.setCentralWidget(myWidget)

【讨论】:

感谢您的回答和背后的解释。这就像一个魅力 我需要等待至少 3 分钟。等一下 对不起,我不知道那个规则。 我也没有。不得不说,这么快就得到了完美的答案,真是令人惊讶

以上是关于Qt 设计器创建的 QWidget 不被识别为 QWidget的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ref.getCollections() 不被识别为函数?

为啥包含类的名称不被识别为返回值函数注释? [复制]

派生类不被识别为协变

React Native 错误 - yarn' 不被识别为内部或外部命令

“/”不被识别为内部或外部命令

在qt creator中用ui设计器创建了一个QDialog的窗口,添加了一个QWidget部件,怎么能在Qwidget上用QPainter