情况如下。我有一个派生自QListView的类,它添加了一些便利功能,如果你愿意,还可以添加一个自定义小部件。我不想与Designer搏斗以使用我的小部件。我只想在Designer中使用普通的QlistView(作为占位符)并使用pyuic4进行编译。在运行时,我想用我自己的版本替换正常的QListView。
你怎么能这样做?
我希望 init 中的类似内容可以解决这个问题:
self.lstView1 = MyListView
但它没有...
答案 0 :(得分:2)
问题在于您实际上只是替换了lstView1指向的对象,而不是将其添加到窗口小部件中。也就是说,当你创建对象时,你只需告诉python使用lstView1指向你的新对象,但是实际的UI正在使用旧指针,因为它已经添加了。
我假设您已经使用py4uci将ui文件转换为python并将gui设置为:
class ExambleUI(QtGUi.QDialog, UI_Example):
def __init__(self, parent):
QtGui.QDiialog.__init__(self, parent)
self.setupUI(self)
self.lstView1 = MyListView
因为setupUi在更改lstView的值之前正在执行,所以您没有获得新的小部件。你只需要换行:
class ExambleUI(QtGUi.QDialog, UI_Example):
def __init__(self, parent):
QtGui.QDiialog.__init__(self, parent)
self.lstView1 = MyListView
self.setupUI(self)
另一方面,我建议您遵循此tutorial并在设计器中创建和使用您的小部件,这很容易,也更快。
答案 1 :(得分:0)
使用QLayout替换功能:
ui->main_layout->replace(oldWidget, newWidget);