Qt --- 基本类

位置和尺寸

在QT中我们常见的 点, 线, 尺寸, 矩形 都被进行了封装, 下面依次为大家介绍相关的类

QPoint

QPoint类封装了我们常用用到的坐标点 (x, y), 常用的 API如下:

void QPoint::setX(int x);
void QPoint::setY(int y);

int QPoint::x() const;    //只读
int &QPoint::rx();        //返回引用 rx()=20

int QPoint::y() const;
int &QPoint::ry();

//如果x和y坐标都为0则返回true,否则返回false
bool isNull() const

//返回x()和y()的绝对值之和,传统上称为从原点到该点的向量的“曼哈顿长度”--->两条直角边构成的距离
//(p1-p2).manhattanLength();   
int manhattanLength() const    

//返回一个交换了x和y坐标的点:   QPoint{1, 2}.transposed() // {2, 1}  
QPoint transposed() const    
    
// 直接通过坐标对象进行算术运算: 加减乘除 对坐标的缩放操作
QPoint &QPoint::operator*=(float factor);
QPoint &QPoint::operator*=(double factor);
QPoint &QPoint::operator*=(int factor);
QPoint &QPoint::operator+=(const QPoint &point);
QPoint &QPoint::operator-=(const QPoint &point);
QPoint &QPoint::operator/=(qreal divisor);
...
//测试代码
#include
void testPoint();
void testPoint()
{
    //构造坐标点
    QPoint pos(5,4);
    //修改坐标 10 4
    pos.setX(10);
    //获取坐标
    qDebug()<两个点相减得到两点距离再求曼哈顿距离
    qDwbug()<

QLine

QLine是一个直线类, 封装了两个坐标点 (两点确定一条直线)

常用API如下:

// 设置直线的起点坐标
void setP1(const QPoint &p1);
// 设置直线的终点坐标
void setP2(const QPoint &p2);

void setPoints(const QPoint &p1, const QPoint &p2);    //两点确定一条线段
void setLine(int x1, int y1, int x2, int y2);


QPoint p1() const;		// 返回直线的起始点坐标
QPoint p2() const;		// 返回直线的终点坐标
QPoint center() const;	// 返回值直线的中心点坐标, (p1() + p2()) / 2	


int x1() const;		    // 返回值直线起点的 x 坐标
int y1() const;		    // 返回值直线起点的 y 坐标
int x2() const;		    // 返回值直线终点的 x 坐标
int y2() const;		    // 返回值直线终点的 y 坐标

int dx() const			//返回直线向量的水平分量  
int dy() const			//返回直线向量的垂直分量  

// 用给定的坐标点平移这条直线
void translate(const QPoint &offset);
void translate(int dx, int dy);
// 用给定的坐标点平移这条直线, 返回平移之后的坐标点(不会改变这条线的坐标)
QLine translated(const QPoint &offset) const;
QLine translated(int dx, int dy) const;

// 直线对象进行比较
bool operator!=(const QLine &line) const;
bool operator==(const QLine &line) const;
#include
void testLine()
{
    //线段
    QLine line(2,3,4,5);
    //设置直线的起点坐标
    line.setP1(QPoint(10,10));   //QLine(QPoint(10,10),QPoint(4,5))
    //设置坐标
    line.setLine(5,5,9,9);
    //平移线段
    line.translate(1,2);
    qDebug()<

QSize

在QT中QSize类用来形容长度和宽度, 常用的API如下:

void setWidth(int width)
void setHeight(int height);

int width() const;		// 得到宽度
int &rwidth();			// 得到宽度的引用
int height() const;		// 得到高度
int &rheight();			// 得到高度的引用

void transpose();			// 交换高度和宽度的值
QSize transposed() const;	// 交换高度和宽度的值, 返回交换之后的尺寸信息

//返回一个大小,宽为当前大小与other的最小值,高为当前大小与other的最小值
QSize boundedTo(const QSize& oterSize)
//返回一个大小,宽为当前大小与other的最大值,高为当前大小与other的最大值    
QSize expandedTo(const QSize &otherSize) const    
    
/*
根据指定的模式,按给定的宽度和高度缩放矩形:  
	如果mode为Qt::IgnoreAspectRatio,则大小设置为(width, height)。  
	如果mode为Qt::KeepAspectRatio,当前大小将在内部缩放到一个尽可能大的矩形(宽度,高度),保持高宽比。  
	如果mode是Qt::KeepAspectRatioByExpanding,当前大小被缩放到一个矩形,尽可能小的外部(宽度,高度),保持长宽比。  
*/
void scale(int width, int height, Qt::AspectRatioMode mode)
void scale(const QSize &size, Qt::AspectRatioMode mode)
QSize scaled(int width, int height, Qt::AspectRatioMode mode) const
QSize scaled(const QSize &s, Qt::AspectRatioMode mode) const
    

// 进行算法运算: 加减乘除
QSize &operator*=(qreal factor);
QSize &operator+=(const QSize &size);
QSize &operator-=(const QSize &size);
QSize &operator/=(qreal divisor);

Qt --- 基本类_第1张图片

#include
void testSize()
{
    QSize size(640,480);
    //设置宽度和高度
    size.setWidth(1920);
    size.setHeight(1080);
    size.width();
    size.heigth();
    qDebug()<

QRect 

在Qt中使用 QRect类来描述一个矩形, 常用的API如下:

// 构造一个空对象
QRect::QRect();
// 基于左上角坐标, 和右下角坐标构造一个矩形对象
QRect::QRect(const QPoint &topLeft, const QPoint &bottomRight);
// 基于左上角坐标, 和 宽度, 高度构造一个矩形对象
QRect::QRect(const QPoint &topLeft, const QSize &size);
// 通过 左上角坐标(x, y), 和 矩形尺寸(width, height) 构造一个矩形对象
QRect::QRect(int x, int y, int width, int height);

// 设置矩形的尺寸信息, 左上角坐标不变
void QRect::setSize(const QSize &size);
// 设置矩形左上角坐标为(x,y), 大小为(width, height)
void QRect::setRect(int x, int y, int width, int height);
// 设置矩形宽度
void QRect::setWidth(int width);
// 设置矩形高度
void QRect::setHeight(int height);

// 返回值矩形左上角坐标
QPoint QRect::topLeft() const;
// 返回矩形右上角坐标
// 该坐标点值为: QPoint(left() + width() -1, top())
QPoint QRect::topRight() const;
// 返回矩形左下角坐标
// 该坐标点值为: QPoint(left(), top() + height() - 1)
QPoint QRect::bottomLeft() const;
// 返回矩形右下角坐标
// 该坐标点值为: QPoint(left() + width() -1, top() + height() - 1)
QPoint QRect::bottomRight() const;
// 返回矩形中心点坐标
QPoint QRect::center() const;

// 返回矩形上边缘y轴坐标
int QRect::top() const;
int QRect::y() const;
// 返回值矩形下边缘y轴坐标
int QRect::bottom() const;
// 返回矩形左边缘 x轴坐标
int QRect::x() const;
int QRect::left() const;
// 返回矩形右边缘x轴坐标
int QRect::right() const;

// 返回矩形的高度
int QRect::width() const;
// 返回矩形的宽度
int QRect::height() const;
// 返回矩形的尺寸信息
QSize QRect::size() const;

//调整矩形的尺寸 (左上角和右下角坐标偏移量)
void QRect::adjust(int dx1, int dy1, int dx2, int dy2)
QRect QRect::adjusted(int dx1, int dy1, int dx2, int dy2) const    

Qt --- 基本类_第2张图片

//测试代码
#include
void testRect()
{
    //构造一个矩形
    QRect rect(5,5,250,250);
    //输出左上角的坐标
    qDebug()<

 日期和时间

 QDate

// 构造函数
QDate::QDate();
QDate::QDate(int y, int m, int d);    //年 月 日

// 公共成员函数
// 重新设置日期对象中的日期
bool QDate::setDate(int year, int month, int day);
// 给日期对象添加 ndays 天
QDate QDate::addDays(qint64 ndays) const;
// 给日期对象添加 nmonths 月
QDate QDate::addMonths(int nmonths) const;
// 给日期对象添加 nyears 月
QDate QDate::addYears(int nyears) const;

// 得到日期对象中的年/月/日
int QDate::year() const;
int QDate::month() const;
int QDate::day() const;
void QDate::getDate(int *year, int *month, int *day) const;
 
/*日期对象格式化
    d 		- 	没有前导零的日子 (1 to 31)  
    dd		-	前导为0的日子   (01 to 31)  
    ddd		-	显示(缩写) 周一、周二、周三、周四、周五、周六、周日		
    dddd	- 	显示(完整) 星期一、星期二、星期三、星期四、星期五、星期六、星期日
    
    M		-	没有前导零的月份(1到12)  在年月日中只有月份是大写 小写m用来表示其他东西
    MM		-	前导零的月份(01到12)  
    MMM		-	缩写 1月、2月、3月...         
    MMMM	-	完整 一月、二月、三月...
    
    yy		-	两个数字的年 (00 to 99)
    yyyy	-	以四位数表示的年份
*/
QString QDate::toString(const QString &format) const;

// 操作符重载 ==> 日期比较
bool QDate::operator!=(const QDate &d) const;
bool QDate::operator<(const QDate &d) const;
bool QDate::operator<=(const QDate &d) const;
bool QDate::operator==(const QDate &d) const;
bool QDate::operator>(const QDate &d) const;
bool QDate::operator>=(const QDate &d) const;

// 静态函数 -> 得到本地的当前日期
[static] QDate QDate::currentDate();
//测试代码
#include
void testDate()
{
    //构造一个日期对象
    QDate date(2021,3,4);
    qDebug()<一周的的第几天
    qDebug()<

 QTime

// 构造函数
QTime::QTime();    //时 分 秒 毫秒
/*
    h 			==> must be in the range 0 to 23
    m and s 	==> must be in the range 0 to 59
    ms 			==> must be in the range 0 to 999
*/ 
QTime::QTime(int h, int m, int s = 0, int ms = 0);

// 公共成员函数
// Returns true if the set time is valid; otherwise returns false.
bool QTime::setHMS(int h, int m, int s, int ms = 0);
QTime QTime::addSecs(int s) const;
QTime QTime::addMSecs(int ms) const;

// 示例代码
  QTime n(14, 0, 0);                // n == 14:00:00
  QTime t;
  t = n.addSecs(70);                // t == 14:01:10
  t = n.addSecs(-70);               // t == 13:58:50
  t = n.addSecs(10 * 60 * 60 + 5);  // t == 00:00:05
  t = n.addSecs(-15 * 60 * 60);     // t == 23:00:00

// 从时间对象中取出 时/分/秒/毫秒
// Returns the hour part (0 to 23) of the time. Returns -1 if the time is invalid.
int QTime::hour() const;
// Returns the minute part (0 to 59) of the time. Returns -1 if the time is invalid.
int QTime::minute() const;
// Returns the second part (0 to 59) of the time. Returns -1 if the time is invalid.
int QTime::second() const;
// Returns the millisecond part (0 to 999) of the time. Returns -1 if the time is invalid.
int QTime::msec() const;


// 时间格式化
/*
	-- 时   如果是AM/PM显示,0 ~ 23或1 ~ 12
    h	==>	The hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)
    hh	==>	The hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)\
            0到23,即使有AM/PM显示
    H	==>	The hour without a leading zero (0 to 23, even with AM/PM display)
    HH	==>	The hour with a leading zero (00 to 23, even with AM/PM display)
    -- 分
    m	==>	The minute without a leading zero (0 to 59)
    mm	==>	The minute with a leading zero (00 to 59)
    -- 秒
    s	==>	The whole second, without any leading zero (0 to 59)
    ss	==>	The whole second, with a leading zero where applicable (00 to 59)
    -- 毫秒
	zzz	==>	The fractional part of the second, to millisecond precision, 
			including trailing zeroes where applicable (000 to 999).
	-- 上午或者下午
    AP or A		==>		使用AM/PM(大写) 描述上下午, 中文系统显示汉字
    ap or a		==>		使用am/pm(小写) 描述上下午, 中文系统显示汉字
*/
QString QTime::toString(const QString &format) const;


// 操作符重载 ==> 时间比较
bool QTime::operator!=(const QTime &t) const;
bool QTime::operator<(const QTime &t) const;
bool QTime::operator<=(const QTime &t) const;
bool QTime::operator==(const QTime &t) const;
bool QTime::operator>(const QTime &t) const;
bool QTime::operator>=(const QTime &t) const;

// 静态函数 -> 得到当前时间
[static] QTime QTime::currentTime();
//测试代码
#include
void testTime()
{
    //获取当前时间
    QTime curTime = QTime::currentTime();
    qDebug()<

 经时计时器

 QTime 的经时计时器已经过时了,推荐使用 QElapsedTimer

//QTime已废弃的函数
// 开始计时
void QTime::start();
// 计时结束
int QTime::elapsed() const;
// 重新计时
int QTime::restart();

// 推荐使用的API函数
// QElapsedTimer 类
void QElapsedTimer::start();
qint64 QElapsedTimer::restart();
qint64 QElapsedTimer::elapsed() const;

 主要的使用方法就是测量一个操作耗时多久,例子如下:

#include
QElapsedTimer elapse;
elapse.start();
 //经过计时器可以用来计算某段代码,执行用了多长时间
for(int i = 0;i<1000000;i++);

elapse.restart();                             //重新开始计时
qDebug()<

 QDateTime

// 构造函数
QDateTime::QDateTime();      //既有日期也有时间
QDateTime::QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec = Qt::LocalTime);

// 公共成员函数
// 设置日期
void QDateTime::setDate(const QDate &date);
// 设置时间
void QDateTime::setTime(const QTime &time);
// 给当前日期对象追加 年/月/日/秒/毫秒, 参数可以是负数
QDateTime QDateTime::addYears(int nyears) const;
QDateTime QDateTime::addMonths(int nmonths) const;
QDateTime QDateTime::addDays(qint64 ndays) const;
QDateTime QDateTime::addSecs(qint64 s) const;
QDateTime QDateTime::addMSecs(qint64 msecs) const;

// 得到对象中的日期
QDate QDateTime::date() const;
// 得到对象中的时间
QTime QDateTime::time() const;

// 日期和时间格式, 格式字符参考QDate 和 QTime 类的 toString() 函数
QString QDateTime::toString(const QString &format) const;


// 操作符重载 ==> 日期时间对象的比较
bool QDateTime::operator!=(const QDateTime &other) const;
bool QDateTime::operator<(const QDateTime &other) const;
bool QDateTime::operator<=(const QDateTime &other) const;
bool QDateTime::operator==(const QDateTime &other) const;
bool QDateTime::operator>(const QDateTime &other) const;
bool QDateTime::operator>=(const QDateTime &other) const;

// 静态函数
// 得到当前时区的日期和时间(本地设置的时区对应的日期和时间)
[static] QDateTime QDateTime::currentDateTime();
#include
void testDateTime()
{
    //获取当前时间
    QDateTime dateTime = QDateTime::currentDateTime();
    qDebug()<

Qt 中容器遍历的方式

container

Qt中提供了一组通用的基于模板的容器类(container class)。可以用来存储指定的项(items),与STL(C++标准模板库)相比,Qt中的容器更轻量,更安全,功能更强大。

  • 序列式容器

    • QList

    • QLinkedList

    • QVector

    • QStack

    • QQueue

    对于大多数应用程序,QList是最好的类型。虽然它是作为数组列表实现的,但是它提供了非常快的前置和追加。如果你真的需要一个链表,使用QLinkedList;如果您希望您的项目占用连续的内存位置,请使用QVector。QStack和QQueue是提供LIFO和FIFO语义的便利类。

  • 关联式容器

    • QMap

    • QMultiMap

    • QHash

    • QMultiHash

    • QSet

    “multi”容器方便地支持与单个键相关联的多个值。“hash”容器通过使用哈希函数而不是对排序集进行二进制搜索,从而提供更快的查找。

  • 作为特殊情况,QCache和QContiguousCache类在有限的缓存存储中提供了对象的高效散列查找。

遍历容器

Qt提供了两种遍历容器的风格:

Java风格 的迭代器和 STL风格 的迭代器。java风格的迭代器更容易使用并提供高级功能,而STL风格的迭代器稍微更高效,可以与Qt和STL的通用算法一起使用

Qt --- 基本类_第3张图片

Qt --- 基本类_第4张图片

//测试代码
#include
void testIterator()
{
    QList list;
    //通过初始化参数列表添加数据  
    QList list = {1,2,3,4,5};
    //通过流的方式添加数据
    list<<6<<7<<8<<9;     
    //通过函数添加数据
    list.append(88);   
    list.prepend(11);
    //在2前面的位置添加44
    list.insert(2,44);   
    //遍历
    //java风格         
    QListIterator it(list);
    while (it.hasNext())            //有下一个就获取下一个
    {
        std::out<::const_iterator*/auto  it = list.constBegin(),it!=constEnd();it++)
    {
        std::cout<<*it<<" ";
    }
    //c++11 给我们提供了一个基于范围的for循环,更简单-->装的是什么类型就定义什么类型,让值到list中去拿 并输出
    for(auto/*int*/ val : list)
    {
        std::cout<

序列式容器

QList

QList模板提供了一个列表,实际上是一个指针数组,当项目数小于1000时,可以实现快速的插入删除操作

QList 是 Qt 的通用容器类之一。它将项目存储在一个列表中,该列表提供基于索引的快速访问和基于索引的插入和删除。 QList、QLinkedList 和 QVector 提供类似的 API 和功能。它们通常可以互换,但会产生性能后果。

使用概述:

  • QVector 应该是您的默认首选。 QVector 通常会比 QList 提供更好的性能,因为 QVector 总是将其项按顺序存储在内存中,其中 QList 将在堆上分配它的项,除非 sizeof(T) <= sizeof(void *) 并且 T 已使用 Q_DECLARE_TYPEINFO 声明为 Q_MOVABLE_TYPE 或 Q_PRIMITIVE_TYPE。

  • 然而,QList 在整个 Qt API 被大量使用,用于传递参数和返回值。 使用 QList可以很方便的与这些 API 进行交互。

  • 如果您需要一个真正的链表,它保证常量时间内插入列表,并且使用迭代器指向项而不是索引,那么请使用QLinkedList。

公有函数

  • 添加数据

//支持流插入
QList()<<1<<2<<3<<4<<5;

void append(const T &value)
void append(const QList &value)
 
void insert(int i, const T &value)
QList::iterator insert(QList::iterator before, const T &value)

void prepend(const T &value)
void push_back(const T &value)
void push_front(const T &value)
  • 获取数据

T &back()
const T &back() const  

T &first()
const T &first() const
T &front()
const T &front() const 

T &last()
const T &last() const 

const T &constFirst() const
const T &constLast() const

//返回下标为i的元素,如果下标i不合法,则返回defaultValue
T value(int i) const
T value(int i, const T &defaultValue) const  
    
const T &at(int i) const
T &operator[](int i)
const T &operator[](int i) const
//返回从位置pos开始的子列表。如果length为-1(默认),则包含pos中的所有元素; 
QList mid(int pos, int length = -1) const
  • 删除数据

void clear()
    
QList::iterator erase(QList::iterator pos)
QList::iterator erase(QList::iterator begin, QList::iterator end)   

void pop_back()
void pop_front()
//删除元素   
int removeAll(const T &value)
bool removeOne(const T &value)
void removeAt(int i)
void removeFirst()
void removeLast()
//删除元素并返回它,如果不使用返回值,removeAt()会更高效 
T takeAt(int i)
T takeFirst()
T takeLast()
  • 查找/替换

//返回value在列表中第一次出现的索引位置,从索引位置from向前搜索。 如果没有匹配的项,则返回-1。  
int indexOf(const T &value, int from = 0) const
//返回value在列表中最后一次出现的索引位置,从索引位置from反向搜索。如果from是-1(默认值),则搜索从最后一项开始。如果没有匹配的项,则返回-1。     
int lastIndexOf(const T &value, int from = -1) const
//将索引位置为i的项替换为value
void replace(int i, const T &value)
//如果列表中包含值的出现,则返回true; 否则返回false。 该函数要求值类型具有operator==()的实现。     
bool contains(const T &value) const
  • 交换/移动

//将索引位置from到索引位置to  
//["A", "B", "C", "D", "E", "F"] move(1,4)-> ["A", "C", "D", "E", "B", "F"]
void move(int from, int to)

void swap(QList &other)
//交换下标i j的元素    
void swapItemsAt(int i, int j)
  • 判断函数

int count(const T &value) const
int count() const
int size() const
int length() const

bool empty() const
bool isEmpty() const
//如果列表第一项/后一项等于value,则返回true; 否则返回false。  
bool startsWith(const T &value) const    
bool endsWith(const T &value) const
//预分配空间大小    
void reserve(int alloc)
  • 和其他容器互转

QSet toSet() const
std::list toStdList() const
QVector toVector() const

[static] QList fromSet(const QSet &set)
[static] QList fromStdList(const std::list &list)
[static] QList fromVector(const QVector &vector)

QStringList → 字符串列表

QStringList 继承自 QList 它提供基于索引的快速访问以及快速插入和删除。 将字符串列表作为值参数传递既快速又安全。 QList的所有功能也适用于QStringList。 例如,可以使用isEmpty()来测试列表是否为空,还可以调用append()、prepend()、insert()、replace()、removeAll()、removeAt()、removeFirst()、removeLast()和removeOne()等函数来修改QStringList。 此外,QStringList提供了一些方便的函数,使处理字符串列表更容易:

  • 判断是否包含某个字符串 → 全匹配

bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
bool contains(QLatin1String str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
bool contains(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
  • 过滤:返回包含子字符串 str 的所有字符串的列表 → 部分匹配,只要包含即可

QStringList filter(const QString &str, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
QStringList filter(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QStringList filter(const QRegExp &rx) const
QStringList filter(const QRegularExpression &re) const
  • 查找

//从左往右查找 从哪里开始查找 | 默认从0开始查
int indexOf(const QRegExp &rx, int from = 0) const
int indexOf(QStringView str, int from = 0) const
int indexOf(QLatin1String str, int from = 0) const
int indexOf(QRegExp &rx, int from = 0) const
int indexOf(const QRegularExpression &re, int from = 0) const
    
//从右往左查找    正则表达式
int lastIndexOf(const QRegExp &rx, int from = -1) const
int lastIndexOf(QStringView str, int from = -1) const
int lastIndexOf(QLatin1String str, int from = -1) const
int lastIndexOf(QRegExp &rx, int from = -1) const
int lastIndexOf(const QRegularExpression &re, int from = -1) const   
  • 连接:将QStringList中的所有字符串连接为一个字符串,每个元素由给定的分隔符(可以是空串)分隔

//支持流插入 << 返回的是一个字符串
QString join(const QString &separator) const
QString join(QStringView separator) const
QString join(QLatin1String separator) const
QString join(QChar separator) const
  • 删除:从QStringList中删除重复的元素。 返回已删除元素的数量

int removeDuplicates()
  • 替换:返回一个字符串列表,其中每个字符串在找到before文本时都将before文本替换为after文本

QStringList &replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringList &replaceInStrings(QStringView before, QStringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringList &replaceInStrings(const QString &before, QStringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringList &replaceInStrings(QStringView before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringList &replaceInStrings(const QRegExp &rx, const QString &after)
QStringList &replaceInStrings(const QRegularExpression &re, const QString &after)
  • 排序:升序

void sort(Qt::CaseSensitivity cs = Qt::CaseSensitive)

 Qt --- 基本类_第5张图片

//测试代码
#include 
void testStringList()
{
    //构造一个字符串列表 用于存储大量的字符串
    QStringList names = {"大白","大白","小白","大黑","小黑"};
    //重载了流的方式
    names<<",.?!"<<"nullptr"<<"young"<<"loading";
    qDebug()<部分匹配
    auto lists = names.filter("g");           //返回值类型:QStringList 需要接收一下
    for(auto str : lists)
    {
        std::cout<返回下标的位置
    int pos = names.indexOf("小白");          
    qDebug()<按升序排列|区分大小写
    names.sort();
    qDebug()<按降序排列|比较准则
    std::sort(names.begin(),names.end(),[](QString& s1,QString& s2){ return s1>s2; });
    qDebug()<

你可能感兴趣的:(Qt,c++,开发语言,qt)