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