2013-01-01 70 views
1

我有問題從QTableWidget獲取選定的行。我有這樣的表格:QTableWidget中SelectedRows列表

[id] [ key ] 
0  test 
1  pass 

我想獲取每一行的關鍵值。我試過QTableWidget-> selectedIndexes();但它說它受到保護,我無法訪問它。當我嘗試QTableWidget-> SelectionModel-> selectedIndexes時,我不知道如何遍歷列表並獲取關鍵值。有誰知道更好的方法我該怎麼做? 此致敬禮。

回答

0

我假設你設置了你的表部件的選擇行爲來選擇

您可以隨時訪問任何項目視圖/小部件的所謂「選擇模型」。 QTableWidget繼承自QAbstractItemView,它給你access to this special model。這個模型可以告訴你selected rows列表爲QModelIndex,然後它可以告訴你the row。一旦你有了它們,你可以訪問table content,在你的情況下,索引爲1的列中的文本(鍵列)。

static const KEY_COLUMN = 1; 

QList<QString> selectedKeys; 
QItemSelectionModel *selectionModel = ui->tableWidget->selectionModel(); 
foreach(QModelIndex index, selectionModel->selectedRows()) 
    selectedIDs << ui->tableWidget->item(index->row(), KEY_COLUMN)->text(); 
+0

是的,我有默認的selectRows。假設我們有2列和2行。當我們做ui-> tableWidget-> selectedItems()時,它會給我們4個項目,循環會花費更長的時間。我只需要獲取行,而不是項目。這將是一個竅門,但我需要一個更快的方法。 – Nika

+0

@OvérFlôwz哦,我認爲它只返回2個項目。好吧,讓我看看在這種情況下我們應該做些什麼...... – leemes

+0

@OvérFlôwz看到我的更新。我希望這有幫助。告訴我,如果我犯了一個錯誤... – leemes

0

因爲你正在使用QTableWidget,你可能要被調用selectedItems()。您的結果將根據你設置的選擇行爲,通過setSelectionBehavior()

當你有一個項目列表,你可以明確得到第二列項(如果尚未選中):

QTableWigetItem *keyItem = table->item(anItem->row(), 1); 
QString val = keyItem->text(); 
+0

同樣的答覆,如果我把它放在循環中,如果我們假設我們有2列和2行,它將循環4次,但我只需循環2次。 – Nika