代码之家  ›  专栏  ›  技术社区  ›  Wim Verhavert

在运行时替换小部件

  •  2
  • Wim Verhavert  · 技术社区  · 15 年前

    情况是这样的。我有一个派生自qlistview的类,它添加了一些方便的函数,如果您愿意的话,它是一个定制的小部件。我不想和设计师争用我的小部件。我只想在设计器中使用一个普通的qlistview(作为占位符)并用pyuic4编译它。在运行时,我想用我自己的版本替换普通的qlistview。

    你怎么做到这一点?

    我希望这样的事情发生在 初始化 可以做到:

    self.lstView1 = MyListView
    

    但它不…

    2 回复  |  直到 8 年前
        1
  •  2
  •   eyllanesc Yonghwan Shin    8 年前

    问题是,实际上您只是替换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 在设计器中创建和使用you小部件,既简单又快捷。

        2
  •  0
  •   Slavenskij    8 年前

    使用qlayout replace函数:

    ui->main_layout->replace(oldWidget, newWidget);