1.概要
2.内容
在使用 Qt 的 QTableView
时,你可能需要获取用户选择的行。这可以通过 QItemSelectionModel
类来实现,该类管理选择的状态。下面是一个简单的示例,展示了如何在 C++ 中获取 QTableView
中用户选择的行。
假设你有一个 QTableView
对象 tableView
,你可以按照以下步骤获取选择的行:
- 获取
QTableView
的选择模型。 - 使用选择模型的方法来获取选择的行。
以下是一个示例代码:
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QItemSelectionModel>
#include <QModelIndex>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建一个标准的项模型
QStandardItemModel model(5, 3); // 5 行 3 列
for (int row = 0; row < 5; ++row) {
for (int column = 0; column < 3; ++column) {
QModelIndex index = model.index(row, column, QModelIndex());
model.setData(index, QVariant((row+1) * (column+1)));
}
}
// 创建一个 QTableView
QTableView tableView;
tableView.setModel(&model);
tableView.show();
// 获取选择模型
QItemSelectionModel *selectionModel = tableView.selectionModel();
// 连接选择改变信号到槽函数
QObject::connect(selectionModel, &QItemSelectionModel::selectionChanged, [&]() {
// 获取所有选择的行
QModelIndexList selectedRows = selectionModel->selectedRows();
// 打印选择的行
qDebug() << "Selected rows:";
for (const QModelIndex &index : selectedRows) {
qDebug() << "Row:" << index.row();
}
});
return app.exec();
}
运行效果
Selected rows:
Row: 1
Selected rows:
Row: 2
Selected rows:
Row: 3
Selected rows:
视频效果
QTableView获取选中的行
在这个示例中,我们创建了一个 QStandardItemModel
并填充了一些数据,然后将该模型设置为 QTableView
的模型。我们获取了 QTableView
的选择模型,并连接了选择改变信号(selectionChanged
)到一个 Lambda 函数。
每当选择发生变化时,Lambda 函数就会执行,获取所有选择的行,并打印这些行的行号。
关键方法:
QItemSelectionModel::selectedRows(int column = -1)
:返回指定列中所有选择的行的模型索引列表。如果列参数为 -1,则返回所有列中的选择行。
通过这种方式,你可以轻松地获取 QTableView
中用户选择的行,并进行相应的处理。