QT开发中文网

C++ QTableView实现一个可选中多行的表格,输出选中所有行的内容

以下是一个示例代码,展示如何使用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();
}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1177

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?