2011-01-07 60 views
10

我有一个在左边,在中间隔板和右侧的小部件QTreeWidgetQHBoxLayout如何用另一个使用Qt替换一个Widget?

当我点击QTreeWidget,我想改变右边的窗口小部件修改QTreeWidgetItem

我试着用这个代码要做到这一点:

def new_rendez_vous(self): 
    self.ui.horizontalLayout_4.removeWidget(self.ui.editionFormWidget) 
    del self.ui.editionFormWidget 
    self.ui.editionFormWidget = RendezVousManagerDialog(self.parent) 
    self.ui.editionFormWidget.show() 
    self.ui.horizontalLayout_4.addWidget(self.ui.editionFormWidget) 
    self.connect(self.ui.editionFormWidget, QtCore.SIGNAL('saved'), self.scheduleTreeWidget.updateData) 

def edit(self, category, rendez_vous): 
    self.ui.horizontalLayout_4.removeWidget(self.ui.editionFormWidget) 
    del self.ui.editionFormWidget 
    self.ui.editionFormWidget = RendezVousManagerDialog(self.parent, category, rendez_vous) 
    self.ui.editionFormWidget.show() 
    self.ui.horizontalLayout_4.addWidget(self.ui.editionFormWidget) 
    self.connect(self.ui.editionFormWidget, QtCore.SIGNAL('saved'), self.scheduleTreeWidget.updateData) 

def edit_category(self, category): 
    self.ui.horizontalLayout_4.removeWidget(self.ui.editionFormWidget) 
    del self.ui.editionFormWidget 
    self.ui.editionFormWidget = CategoryManagerDialog(self.parent, category) 
    self.ui.editionFormWidget.show() 
    self.ui.horizontalLayout_4.addWidget(self.ui.editionFormWidget) 
    self.connect(self.ui.editionFormWidget, QtCore.SIGNAL('saved'), self.scheduleTreeWidget.updateData) 

但它不工作并且所有小部件彼此堆叠在一起:

Exemple of the bug http://hubscher.remy.free.fr/tally/images/2011/01/07/CaptureDescribingTheBug525.jpg

你知道我可以删除旧的窗口小部件和一个显示新的?

回答

16

最常见的解决方案是使用QStackedWidget并将所有可能的小部件放入堆栈。选择一个项目时,只需拨打setCurrentWidget即可显示您想要的项目。

+0

不错,我会试试看。谢谢 – Natim 2011-01-07 12:20:31

16

我和Natim有同样的问题。

的QStackedWidget为预设布局中的溶液。它就像一个老式的餐厅里一个音乐盒里的轻快的东西。 (X光盘自动播放机中的相册数量,翻转安装的相册)。

然而,这并不能解决问题。

例如我有代码我正在使用UI布局进行原型设计,但是我想用一些在主脚本执行过程中编码的小部件代替一些小部件,或者是动态创建的小部件。

我相信有一个简单的程序或警告如何正确地删除/替换小部件。

我的代码在网格布局基本的文本编辑窗口小部件。我想为这个小部件的自定义版本编写拖放操作,然后用默认的textEdit交换出来。

就像Natim一样,代码似乎在逻辑上是合理的,但是这些小部件像倾卸钱包一样在布局中堆积如山。

希望能招弄清楚这个和重新发布警告。

SOLUTION:

瞧!找到一些绝对可行的方法。关闭您的小工具

# Remove, Create, Replace 
    self.ui.gridLayout.removeWidget(self.ui.dragDataEdit) 
    self.ui.dragDataEdit.close() 
    self.ui.dragDataEdit = myDumpBox(self.ui.centralwidget) 
    self.ui.gridLayout.addWidget(self.ui.dragDataEdit, 0, 0, 1, 1) 
    self.ui.gridLayout.update() 

我从布局中删除了小部件,然后关闭了小部件。此时我正在使用的变量可用于创建自定义/修改的小部件,然后将其重新插入到布局中。

是的,需要更多的优雅来处理更复杂的布局,但需要销毁一个小部件,以取代它是在.close()方法

干杯..希望这会有所帮助。 乙

相关问题