运行时替换组件
这是一个情况。我有一个类,它是从QListView派生出来的,增加了一些方便的功能,可以说是一个自定义的小部件。我不想在设计器里费劲地使用我的小部件。我只是想在设计器中使用一个普通的QListView(作为占位符),然后用pyuic4编译它。在运行时,我想把这个普通的QListView替换成我自己的版本。
那该怎么做呢?
我希望在init里像这样做能解决问题:
self.lstView1 = MyListView
但结果并没有...
2 个回答
1
使用QLayout的替换功能:
ui->main_layout->replace(oldWidget, newWidget);
3
问题在于,你实际上只是替换了lstView1指向的对象,但并没有把它添加到界面上。也就是说,当你创建新对象时,你只是告诉Python用lstView1指向这个新对象,但界面实际上还是在使用旧的指针,因为它已经被添加过了。
我假设你是用py4uci把ui文件转换成Python代码,并且你设置了界面如下:
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)
另外,我建议你参考这个教程,在设计器中创建和使用你的控件,这样更简单也更快。