QTableView使用QSortFilterProxyModel后行号错乱

在Qt中,当你使用QSortFilterProxyModel对QTableView进行排序或过滤后,点击事件可能会返回一个不正确的行号,因为代理模型可能会改变数据的显示顺序。为了获取点击数据的真实行号和内容,你可以使用mapToSource()函数,它可以将代理模型中的索引映射回源模型中的索引。

以下是如何使用mapToSource()来获取真实行号和内容的步骤:

  1. 在QTableView中实现点击事件的槽函数。
  2. 在槽函数中,获取点击的代理模型索引。
  3. 使用mapToSource()将代理模型索引转换为源模型索引。
  4. 使用源模型索引来获取真实的行号和数据。

示例代码如下:

cpp 复制代码
void TableView::cellClicked(const QModelIndex &proxyIndex) {
    if (!proxyIndex.isValid())
        return;

    // 将代理模型索引映射到源模型索引
    QModelIndex sourceIndex = proxyModel->mapToSource(proxyIndex);

    // 获取源模型中的真实行号
    int row = sourceIndex.row();

    // 使用源模型索引来获取数据
    QVariant data = sourceModel->data(sourceIndex);

    // 现在你可以使用真实的行号和数据了
    qDebug() << "Real row:" << row << "Data:" << data;
}

在这个例子中,cellClicked是一个槽函数,它在用户点击表格单元格时被调用。proxyModel是QSortFilterProxyModel的实例,sourceModel是源模型。mapToSource()函数用于获取源模型中对应的索引,从而可以获取真实的行号和数据。

如果你需要在点击事件中区分左键和右键,你可以重写QTableView的mousePressEvent方法,并在其中检查点击的按钮类型。

相关推荐
xiaogai_gai1 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python
数据工匠老o2 小时前
异构数据库DDL同步:260条链路的结构变更自动适配方案
数据库·架构
这个DBA有点耶3 小时前
银行业市占率最高的国产数据库是谁?先搞清楚“市占率”的四种口径
数据库·程序员·架构
用户6279947182623 小时前
南大通用GBase 8a之基于审计日志的冷温热数据分析
数据库
数据库小学妹3 小时前
数据库运维五级成熟度:监控、备份、高可用怎么串起来
运维·数据库·监控
一个天蝎座的程序猿3 小时前
为了给报表提速,我把金仓KES的列存储折腾了个遍:聊聊KES的技术能力
数据库
飞越未来云城的霓虹飞猪3 小时前
AI 数据库地图:从 PostgreSQL 到向量数据库,一次看懂 AI 时代的数据底座
数据库
不像程序员的程序媛3 小时前
导出mysql数据结构
数据库·mysql
GlobalTradercrb3 小时前
独立站SEO先写博客还是先优化产品页?看站点阶段
数据库·人工智能·google·pdf·go·seo
PingCAP4 小时前
善战者无赫赫之功:消费金融核心系统的数据库选型与升级路径
数据库·分布式·架构