QT的QList排序

第一个示例:QList排序

数据类型:

class Student

{

public:

Student();

QString name;

int age;

int num;

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

QList 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的容器都是自动排序或者无序,也没有可以调用的排序函数,那么我们怎么来实现容器内部数据的排序呢?

第一定义 Qlistm_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,Mysql,QT知识汇总,qt,开发语言)