QTableWidget 中的选定行列表

list of SelectedRows in QTableWidget

本文关键字:列表 QTableWidget      更新时间:2023-10-16

我从QTableWidget获取选定的行时遇到问题。我有这样的表:

[id]  [ key ]
 0     test
 1     pass

我想获取每一行的键值。我尝试了QTableWidget->selectedIndexes((;但它说它受到保护,我无法访问它。当我尝试QTableWidget->SelectionModel->selectedIndexes时,我不知道如何遍历列表并获取键值。有谁知道更好的方法我该怎么做?问候。

我假设您将表格小部件的选择行为设置为选择

您可以随时访问任何项目视图/小部件的所谓"选择模型"。 QTableWidget继承自 QAbstractItemView ,这使您可以访问此特殊模型。此模型可以将所选行作为QModelIndex列表告诉您,然后可以告诉您该行。获得它们后,您可以访问表内容,在您的情况下,访问索引为 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();

因为你正在使用QTableWidget,你可能想调用selectedItems()。您的结果将基于您通过setSelectionBehavior()设置选择行为的内容

当您有项目列表时,您可以专门获取第二列项目(如果尚未选择(:

QTableWigetItem *keyItem = table->item(anItem->row(), 1);
QString val = keyItem->text();
您可以使用

QSet来获取所有选定的行。例:

  const QList<QTableWidgetItem*> tableItems=widget->selectedItems();
  QSet<int> uniqueRows;
  for(const QTableWidgetItem *item: tableItems)
  {
      uniqueRows.insert(item->row());
  }