如何用另一个使用Qt替换一个Widget?
问题描述:
我有一个在左边,在中间隔板和右侧的小部件QTreeWidget
的QHBoxLayout
。如何用另一个使用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)
但它不工作并且所有小部件彼此堆叠在一起:
你知道我可以删除旧的窗口小部件和一个显示新的?
答
我和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()方法
干杯..希望这会有所帮助。 乙
不错,我会试试看。谢谢 – Natim 2011-01-07 12:20:31