以下是一个示例代码,展示如何使用Qt的QTableView类实现可选中多行的表格,并输出选中所有行的内容。
首先,需要创建一个QStandardItemModel对象来存储表格数据:
QStandardItemModel* model = new QStandardItemModel(this);
model->setColumnCount(3);
model->setHeaderData(0, Qt::Horizontal, "Name");
model->setHeaderData(1, Qt::Horizontal, "Age");
model->setHeaderData(2, Qt::Horizontal, "Gender");
QList<QStandardItem*> row;
row << new QStandardItem("Alice") << new QStandardItem("25") << new QStandardItem("Female");
model->appendRow(row);
row.clear();
row << new QStandardItem("Bob") << new QStandardItem("30") << new QStandardItem("Male");
model->appendRow(row);
row.clear();
row << new QStandardItem("Charlie") << new QStandardItem("35") << new QStandardItem("Male");
model->appendRow(row);
接下来,创建一个QTableView对象并将其绑定到模型上:
QTableView* tableView = new QTableView(this);
tableView->setModel(model);
然后,设置表格视图的选择模式为多行:
tableView->setSelectionMode(QAbstractItemView::MultiSelection);
最后,我们可以连接表格视图的selectionChanged()信号,以便在用户选择多个行时输出它们的内容:
connect(tableView->selectionModel(), &QItemSelectionModel::selectionChanged, [=](const QItemSelection& selected, const QItemSelection& deselected) {
QList<QModelIndex> indexes = selected.indexes();
QStringList selectedRows;
for (QModelIndex index : indexes) {
QStandardItem* item = model->itemFromIndex(index);
QString rowString = QString("%1, %2, %3").arg(item->text()).arg(model->data(model->index(index.row(), 1)).toString()).arg(model->data(model->index(index.row(), 2)).toString());
selectedRows.append(rowString);
}
qDebug() << "Selected rows: " << selectedRows.join("\n");
});
这将打印出用户选择的所有行的内容。
完整的示例代码如下:
#include <QtWidgets>
int main(int argc, char** argv) {
QApplication app(argc, argv);
QStandardItemModel* model = new QStandardItemModel();
model->setColumnCount(3);
model->setHeaderData(0, Qt::Horizontal, "Name");
model->setHeaderData(1, Qt::Horizontal, "Age");
model->setHeaderData(2, Qt::Horizontal, "Gender");
QList<QStandardItem*> row;
row << new QStandardItem("Alice") << new QStandardItem("25") << new QStandardItem("Female");
model->appendRow(row);
row.clear();
row << new QStandardItem("Bob") << new QStandardItem("30") << new QStandardItem("Male");
model->appendRow(row);
row.clear();
row << new QStandardItem("Charlie") << new QStandardItem("35") << new QStandardItem("Male");
model->appendRow(row);
QTableView* tableView = new QTableView();
tableView->setModel(model);
tableView->setSelectionMode(QAbstractItemView::MultiSelection);
connect(tableView->selectionModel(), &QItemSelectionModel::selectionChanged, [=](const QItemSelection& selected, const QItemSelection& deselected) {
QList<QModelIndex> indexes = selected.indexes();
QStringList selectedRows;
for (QModelIndex index : indexes) {
QStandardItem* item = model->itemFromIndex(index);
QString rowString = QString("%1, %2, %3").arg(item->text()).arg(model->data(model->index(index.row(), 1)).toString()).arg(model->data(model->index(index.row(), 2)).toString());
selectedRows.append(rowString);
}
qDebug() << "Selected rows: " << selectedRows.join("\n");
});
QWidget window;
QVBoxLayout* layout = new QVBoxLayout(&window);
layout->addWidget(tableView);
window.show();
return app.exec();
}