当前位置: 首页 > article >正文

QTableView使用QSortFilterProxyModel后行号错乱

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

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

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

示例代码如下:

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是一个槽函数,它在用户点击表格单元格时被调用。proxyModelQSortFilterProxyModel的实例,sourceModel是源模型。mapToSource()函数用于获取源模型中对应的索引,从而可以获取真实的行号和数据。

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


http://www.kler.cn/a/317396.html

相关文章:

  • CentOS网络配置
  • 深度学习之pytorch常见的学习率绘制
  • 【linux】centos7 换阿里云源
  • SpringBoot实战(三十一)集成iText5,实现RSA签署PDF
  • 封装一个省市区的筛选组件
  • 使用 Keras 训练一个卷积神经网络(CNN)(入门篇)
  • 深度学习经典模型解析
  • 基于SpringBoot+Vue+MySQL的教学资料管理系统
  • Web+Mysql——MyBatis
  • 简单的spring缓存 Cacheable学习
  • Rust 全局变量的最佳实践 lazy_static/OnceLock/Mutex/RwLock
  • 02 BlockChain-- ETH
  • 着色器ShaderMask
  • HTML、CSS
  • python机器学习足球数据建模与分析——数据预测与预测建模
  • 嵌入式综合实验平台-嵌入式综合实训实验箱
  • [Excel VBA]如何使用VBA按行拆分Excel工作表
  • PHP智慧教育新篇章优校管理系统小程序源码
  • uniapp常用声明周期
  • 【C++指南】inline内联函数详解
  • network request to https://registry.npmjs.org/xxx failed, reason: connect ETIM
  • Cesium影像纠偏:高德地图加载与坐标系纠偏技巧
  • 【机器学习(九)】分类和回归任务-多层感知机 (MLP) -Sentosa_DSML社区版
  • Github 2024-09-21Rust开源项目日报 Top10
  • Qt/C++ 了解NTFS文件系统,解析0x80 $Data属性,获取Run Lists数据列表
  • 仓颉编程语言4,遇到BUG求助