2011-01-07 88 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()方法

乾杯..希望這會有所幫助。 乙

相關問題