2013-01-01 73 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