第一个示例:QList排序

数据类型:

class Student

{

public:

Student();

QString name;

int age;

int num;

void insertData(); // 初始化数据

QList<Student> m_stu; // Qlist列表数据

static bool compareBarData(const Student &stu1, const Student &stu2);// 用于对比的 函数

int m_value = 1;

};

添加 初始化数据 ,可以用按钮调用一直添加.

void Dialog::insertData()

{

Student a;

m_value ++;

a.age =10 + m_value;

a.num = 20 + m_value*2;

a.name = "asdf";

m_stu.append(a);

}

对比函数声明

bool Dialog::compareBarData(const Student &stu1, const Student &stu2)

{

return stu1.age > stu2.age;

}

需要排序的地方调用:

qSort(m_stu.begin(),m_stu.end(),compareBarData);

第二个示例:QList强制类型转换QSet实现排序

有很多场景需要我们通过QT的代码调用自身的容器,例如保存时间秒值,时间有顺序的,如何做到容器安升序或者降序进行排序呢,下面有个方法帮助到我们,希望有用。

常用的QT的容器都是自动排序或者无序,也没有可以调用的排序函数,那么我们怎么来实现容器内部数据的排序呢?

第一定义 Qlist<int>m_list;

将乱序的数据push进去链表当中;

第二步:替重

由于list没有替重的功能,相同时间会有重复项,那么如下操作:

重复的list项只需简单转成QSet即可,因为set是没有重复项的

m_list = m_list.toSet().toList();

第三步:排序

bool student::compareBarData(const int &stu1, const int &stu2)

{

//升序或者降序,这里可以调整一下大小关系

return stu2 > stu1;

}

qSort为QT的全局函数,类似qDebug;

qSort(m_listQueryTime.begin(),m_listQueryTime.end(),compareBarData);

很完美。,,尝试一下!!

第三个经验分享:

系统QT的全局函数qDebug() 函数很方便打印出日志信息, 也可以重定向数据流到文件当中,但是如果应用对时间效率要求比较高的时候,还是特别需要注意的:

根据测试,查询数据库大数据情况下,处理数据的循环当中尽量不要打印日志,严重影响效率,一下几点建议:

  1. 线程中控制打印日志打印频率;

  1. 在超大循环中不要打印日志;

  1. 可以通过在prowe文件中增加:DEFINES += QT_NO_DEBUG_OUTPUT 发布版本的时候禁止日志输出;

  1. 当然很多程序关键日志需要打印出来并保存到文件中,出现问题的时候可以进行问题分析;

第四:关于容器

  1. QMap 属于键值对,键值保持唯一,会自动完成降序排序;

  1. QVector 类似数据组,数据的排列方式是根据放入的数据顺序一致;查询效率很低;

  1. QSet 没有提供排序函数接口,并且具有自动替重的特点;

  1. QHash 类似QMap,属于键值对,键值保持唯一,内部的数据是无序的,数据的序列不确定怎么排列;但是查询的效率特表高,对于无顺序要求的地方是很好的选择;

  1. QList 插入元素,元素也是没有自动完成排序,并且元素是可以重复的,高效查询;QList对象可以强制类型转换QSet对象,然后在强制转换过来,实现数据替重的功能;

  1. 第五种的情况,可以结合qSort系统全局函数实现排序功能,具体请参考上面的第二章节的说明。

QT的QList排序相关推荐

  1. Qt QTableView表格排序

    关于Qt QTableView表格排序的问题 本人用到的方法是setSortEnable,发下针对某一列排序失败. 后来发现该列值虽然显示为数字,但是实际存储的是字符串,所以table会按照字符串来排 ...

  2. Qt之QHeaderView排序

    简述 在Windows中我们经常会遇到表头排序,比如可以对文件按照名称.修改日期.类型.大小进行排序,方便我们统一的归类查找. Qt中,我们可以通过点击表头来对QTableView或QTreeView ...

  3. Qt扫盲-QList使用总结

    QList使用总结 概述 一.QList 声明及初始化 1. 声明 QList 2. 初始化 QList 二.QList 基本的 增加.删除.移动.修改 1. 增加节点 2. 删除节点 3. 移动节点 ...

  4. Qt中QList用法详解

    QList 列表指针的 释放 1,使用qDeleteAll() QList<T*> list: qDeleteAll(list): list = NULL; QList<T*> ...

  5. Qt 之文件排序(避免出现1. txt 10.txt 11.txt 2.txt.20.txt....)

    文章目录 场景及解决方案 排序规则 QCollator类 场景及解决方案 项目中,经常用到一些对目录文件进行排序显示的需求,然后遇到一些有规则命名的文件时,经常会出现一些意想不到的排序结果,比如: 这 ...

  6. qt中QList使用removeAt()删除元素

    提要 QList删除元素的时候需要特别注意一点,将元素删除后链表中元素的排列.删除一个元素后,后面的元素会补到被删元素的位置,这样在for循环中若删除元素后继续执行下标++,则会少遍历元素.下面看一个 ...

  7. 三、Qt常用容器之QList

    1.QList介绍 介绍个锤子,有点累,摊牌了,这篇是水的,但是我觉得质量很高,因为我自己写不了这么详细,对,感谢某不知名网站编程指南,我直接白嫖,这篇实在是太多了,说句实话日常使用不久存个指针,然后 ...

  8. qlist 对结构体排序

    结构体排序: 写法一 QList<test> s;test aa;test bb;test cc;aa.num = "14";bb.num = "2" ...

  9. Qt自定义点击表头排序,使支持恢复默认顺序

    0.前言 之前总结了 QTableView 实现排序 ,但是这里还有个问题,就是 Qt 默认的排序状态只有升序和降序,没法通过点击表头恢复到默认的顺序,他这个 SortOrder 宏也只有升序降序两个 ...

最新文章

  1. 我一顿操作把电脑弄崩了!!!数据全没了!!!我该怎么办?
  2. FTP服务器管理【Linux运维之道之脚本案例】
  3. trait功能 php,PHP之Trait功能与用法实例分析
  4. python递归函数查询表_python---------------递归函数
  5. c++-虚函数与多态
  6. 坐顺风车出事故 乘客诉“嘀嗒出行”索赔
  7. IOS AppUI规格指南
  8. HALCON 20.11:深度学习笔记(4)--- 网络和训练过程
  9. 计算机组装报告目录,计算机组装实验报告(共9篇).doc
  10. 安装PhantomJS
  11. 使用sm2签名并验签efi文件
  12. 互联网黑产:那些职业羊毛党到底如何月赚几十万?
  13. 运筹学笔记 网络计划
  14. sin的傅里叶变换公式_傅里叶变换的由来及复数下的傅里叶变换公式证明
  15. 尚硅谷_宋红康_JDBC
  16. MySQL死锁分析与解决之路
  17. Delphi 10.4.1 游戏开发引擎unDelphiX
  18. 集群调度LSF-学习笔记
  19. apmserv mysql_解决在本地计算无法启动Apmserv-MySQL5.1服务,错误1067:进程意外终止
  20. 人生感慨,神马都是浮云

热门文章

  1. 拓嘉启远:拼多多分时折扣是什么意思?怎样优化
  2. Windows10彻底卸载VMWare虚拟机
  3. 在C语言中怎样定义一个字符串并输入输出
  4. 1.第三章 选择结构(一)
  5. 《魔兽世界》的魅力究竟在哪儿?
  6. 台式计算机耳机有杂音怎么办,电脑耳机有杂音滋滋怎么办
  7. 科学计数法e/E?计算机?表示?
  8. 发布《区块链创新与知识产权发展白皮书》
  9. SpringBoot通过WorkBook快速实现对Excel的导入和导出(包括数据校验)
  10. 网页收藏栏小图标_如何设置在网页地址栏中的小图标