QTableView多选

本文详细介绍了如何在QTableView中实现多选功能,包括使用setSelectionBehavior和setSelectionMode配置选择行为,以及通过QItemSelectionModel::SelectionFlags进行精确的多选控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要了解它的setSelectionBehavior和setSelectionMode这两个接口,接下来再来考虑选中的问题。查看官方文档,setSelectionBehavior用来设置选中的是单元格,行还是列,setSelectionMode用来设置用户点击后的界面响应:单选,多选,扩展选择(Ctrl+Shift键),相邻,不选中。这里仅介绍设置为ExtendedSelection mode后的多选问题。

当QTableView进行如下初始化后:

tableview->setSelectionBehavior(QAbstractItemView::SelectRows);
tableview->setSelectionMode(QAbstractItemView::ExtendedSelection);

用代码进行多选的时候,调用QTableView::selectRow或者tableview->selectionModel()->select都达不到我们的要求。

查看API,发现select有两种用法:

virtual void select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command);
virtual void select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command);

之前我们使用的是上面一种,没错下面的接口才是我们需要的。看起来不知道怎么使用,下面是封装后的方法:

void selectMulRows(const QModelIndexList &indexes)
{
    QItemSelectionModel* selection_model = tableview_->selectionModel();
    if (indexes.isEmpty() || !selection_model || !model_) {
        return;
    }

    QItemSelection selection;
    foreach(QModelIndex index, indexes) {
        QModelIndex left = model_->index(index.row(), 0);
        QModelIndex right = model_->index(index.row(), model_->columnCount() - 1);
        QItemSelection sel(left, right);
        //将每一个单元格/每一行都作为一个QItemSelection 对象,并拼接到总的QItemSelection 对象中
        selection.merge(sel, QItemSelectionModel::Select);
    }
    selection_model->select(selection, QItemSelectionModel::Select);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值