2009-02-05 614 views
5

我正在顯示一個彈出菜單來選擇QTableWidget中的一些值。最下面的項目是一個「修改列表」條目,當我選擇它時,一個新的窗口應該自動出現,並且QComboBox應該消失,並且單元格返回到Qt :: DisplayRole狀態。如何告訴QTableWidget結束編輯單元格?

現在Qt的擁有所有這些漂亮的API的調用像QTableWidget.edit()QTableWidget.editItem(),我真正尋找的是一個QTableWidget.endEditing(),最好不指定單元格的索引,但我能得到,使用此呼籲:

table.currentIndex() 

...但我不知道我是否可以保證當前單元格是被編輯的單元格。

是否有API來關閉這類編輯器?

Popup menu

回答

7

QTableWidget繼承QWidget的19個公共時隙。其中一個是setDisabled(),它應該禁用該小部件及其所有子項的輸入事件。

我會嘗試:

table.setDisabled(true); 
table.setDisabled(false); 

雖然表示不會爲你工作,還存在另一種方法: 如果你不喜歡(表失去焦點,我相信),你可以嘗試使用EditTriggers。例如:

table.setEditTriggers(QAbstractItemView::NoEditTriggers); 
+0

你第一個工作,第二個沒有工作。它沒關係,因爲我顯示了一個模態對話框。如果沒有人會提出更自然的解決方案,我會將此答案標記爲正確。 – 2009-02-05 23:50:27

1

您可以使用QTableWidget.closePersistentEditor()關閉編輯器。但是,QAbstractItemView.closeEditor()可能更接近你想要的,特別是因爲你似乎對基於QModelIndex的API感到滿意,並且已經使用了自定義編輯器小部件。

2

table.setCurrentItem(None)是什麼爲我工作。 (如果使用一些cellChanged/itemChanged插槽功能,請不要忘記阻止信號。)

這是用PyQt。對於C++,我認爲用NULL替換None。

0

我不能說清單部件。但是,我到這裏試圖做類似的事情。

我是雙擊一個單元格,並基於該列,調出帶有列表的子表單,然後在關閉時根據所選值移動到下一個適當的列。

我的問題是我可以得到單元格中的值並「選擇」下一個適當的單元格,但原始單元格保持選中編輯模式!

它終於明白我的雙擊是選擇細胞,即。編輯。

單擊即可選擇單元格,但不會打開編輯模式。

附註:絕不能拿該子表格行事真正模式,所以我創建在調用形式的循環:當子表單是可見,唯一的代碼是app.processEvents()

相關問題