QT—常用容器 QStringList,QVector,QMap,QHash,QVariant

QStringList

元素添加

可以直接添加元素,也可也使用append( )方法在末尾追加元素

QStringList weekList<<"星期一"<<"星期二"<<"星期三";
weekList.append("星期四");
qDebug()<

元素遍历 

 for循环遍历

QStringList weekList<<"星期一"<<"星期二"<<"星期三";
for(int i=0;i

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第1张图片

foreach遍历

QStringList weekList<<"星期一"<<"星期二"<<"星期三";
foreach (QString s, weekList) {
    qDebug()<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第2张图片

迭代器遍历

QStringList weekList<<"星期一"<<"星期二"<<"星期三";
QStringList::iterator iter=weekList.begin();
for(;iter!=weekList.end();++iter){
    qDebug()<<*iter;
}

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第3张图片

Java风格遍历

QStringList weekList<<"星期一"<<"星期二"<<"星期三";
//字符串类型的链表迭代器
QListIterator itr(weekList);
while(itr.hasNext()){
   qDebug()<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第4张图片

链表查找

使用contains( )方法可以查找数组中是否包含该字符串

QStringList weekList<<"星期一"<<"星期二"<<"星期三";
qDebug()<<"链表中有星期二:"<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第5张图片

链表插入元素

使用insert( )方法可以向链表中插入元素,insert( )方法第一个参数表示插入的位置,第二个参数表示要插入的数据

QStringList weekList<<"星期一"<<"星期二"<<"星期三";
weekList.insert(4,"星期五");
qDebug()<

链表删除元素

removeFirst( )方法可以删除链表头

removeLast( )方法可以删除链表尾

removeOne(str)方法可以删除指定元素

removeAt(int)可以删除指定位置元素

clear( )方法可以清空链表 

QStringList weekList<<"星期一"<<"星期二"<<"星期二"<<"星期二"<<"星期三"<<"星期四"<<"星期五";
qDebug()<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第6张图片

QVector 

QVector在相邻的内存中存储给定数据类型T的一组数据。在QVector前部或中间位置插入操作速度都很慢,因会导致内存中大量的数据移动。访问数据可使用下标,也可使用迭代器。继承自QVector类的子类有QPolygon、QPolygonF、QStack。

添加元素

QVector vPeople;
//添加元素
vPeople<<"小明"<<"小王"<<"小李";
vPeople.push_back("小孙");
vPeople.append("小张");//尾加
vPeople.prepend("人物:");//头加
vPeople.insert(5,"小丽");
qDebug()<

修改删除元素

QVector vPeople;
vPeople<<"小明"<<"小王"<<"小李"<<"小孙"<<"小张";
qDebug()<<"修改前"<

下标索引和判断链表是否包含某个元素

QVector vPeople;
vPeople<<"小明"<<"小王"<<"小李"<<"小孙"<<"小张";
qDebug()<<"第三个People:"<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第7张图片

Java风格的遍历和读写 

QVector vPeople;
vPeople<<"小明"<<"小王"<<"小李"<<"小孙"<<"小张";
qDebug()<<"只读遍历:";
QVectorIterator it_sr(vPeople);
for(it_sr.toFront();it_sr.hasNext();){
       qDebug()< it_srw(vPeople);
for(it_srw.toFront();it_srw.hasNext();){
    QString str=it_srw.next();
    if(str=="小王"){
        it_srw.setValue("小王王");
    }
    if(!QString::compare(str,"小明")){
        it_srw.remove();
    }
}
qDebug()<<"修改后的数据:";
qDebug()<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第8张图片

QMap

概述

QMap与QHash差别:

①QHash比QMap查找速度更快。

②QHash以任意顺序存储,QMap以Key顺序存储数据。

③QHash的Key必须提供operator==()及一个全局的qHash(Key)函数,而QMap的Key必须提供operator<()函数。

存储一键多值数据时可使用QMultiMap容器或QMultiHash容器。

Java风格迭代器

容器类

只读迭代器

读写迭代器

QMap,QMultiMap

QMapIterator

QMutableMapIterator

QHash,QMultiHash

QHashIterator

QMutableHashIterator

STL风格迭代器

容器类

只读迭代器

读写迭代器

QMap,QMultiMap

QMap::const_iterator

QMap::iterator

QHash,QMultiHash

QHash::const_iterator

QHash::iterator

数据添加

QMap infoMap;
//数据添加
infoMap.insert("小明","168cm");//直接传键值对
infoMap.insert("小张","170cm");
infoMap["小丽"]="168cm";
qDebug()<

元素查找

QMap infoMap;
//数据添加
infoMap.insert("小明","168cm");//直接传键值对
infoMap.insert("小张","170cm");
infoMap["小丽"]="168cm";
//通过key,找value
qDebug()<<"小明的身高:"<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第9张图片

Java风格迭代器

 只读迭代器遍历

QMap infoMap;
//数据添加
infoMap.insert("小明","168cm");//直接传键值对
infoMap.insert("小张","170cm");
infoMap["小丽"]="168cm";
//只读迭代器遍历
QMapIterator it_r(infoMap);
for(it_r.toFront();it_r.hasNext();){
    it_r.next();
    qDebug()<<"Key:"<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第10张图片

使用Java风格迭代器对键值对类型的数据遍历时,也可也按下面方式遍历

迭代器不需要先调用next( ) 方法,直使用key( )方法获取键,但是如果需要获取值就需要先使用next( )方法

QMapIterator it_r(infoMap);
for(it_r.toFront();it_r.hasNext();){
    qDebug()<<"Key:"<

读写迭代器

 findNext( sss)函数会向后查找键值对的值是与sss匹配,如果匹配则返回true,并且迭代器向后移一位,如果不匹配返回false

QMap infoMap;
//数据添加
infoMap.insert("小明","168cm");//直接传键值对
infoMap.insert("小张","170cm");
infoMap["小丽"]="168cm";
//读写迭代器遍历
QMutableMapIteratorit_mrw(infoMap);
for(it_mrw.toFront();it_mrw.hasNext();){
    if(it_mrw.findNext("168cm")){
        it_mrw.setValue("170cm");
    }

}
qDebug()<<"修改数据后遍历:";
for(it_mrw.toFront();it_mrw.hasNext();){
    qDebug()<<"Key:"<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第11张图片

STL风格迭代器

只读迭代器遍历

QMap wMap;
wMap.insert("春天","15℃");
wMap.insert("夏天","35℃");
wMap.insert("秋天","23℃");
wMap.insert("冬天","-3℃");

QMap::const_iterator i_r;
//只读迭代器遍历
i_r=wMap.constBegin();
for(;i_r!=wMap.constEnd();++i_r){
    qDebug()<<"Key:"<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第12张图片

读写迭代器

QMap wMap;
wMap.insert("春天","15℃");
wMap.insert("夏天","35℃");
wMap.insert("秋天","23℃");
wMap.insert("冬天","-3℃");

QMap::iterator it_rw;
it_rw = wMap.find("春天");
if(it_rw!=wMap.end()){
    it_rw.value()="16摄氏度";
}
qDebug()<<"修改春天的数据后遍历:";
it_rw=wMap.begin();
for(;it_rw!=wMap.end();it_rw++){
    qDebug()<<"Key:"<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第13张图片

QMultiMap

QMultiMap允许插入重复的键

插入数据

QMultiMapwPeople;
wPeople.insert("小明","168");
wPeople.insert("小王","167");
wPeople.insert("小张","172");
wPeople.insert("小明","170");
wPeople.insert("小王","176");
wPeople.insert("小王","172");
qDebug()<

元素移除

QMultiMapwPeople;
wPeople.insert("小明","168");
wPeople.insert("小王","167");
wPeople.insert("小张","172");
wPeople.insert("小明","170");
wPeople.insert("小王","176");
wPeople.insert("小王","172");
qDebug()<<"移除前:"<

查找键对应的所有的值

QMultiMapwPeople;
wPeople.insert("小明","168");
wPeople.insert("小王","167");
wPeople.insert("小张","172");
wPeople.insert("小明","170");
wPeople.insert("小王","176");
wPeople.insert("小王","172");
qDebug()<

Java风格的迭代

只读迭代器遍历

QMultiMapwPeople;
wPeople.insert("小明","168");
wPeople.insert("小王","167");
wPeople.insert("小张","172");
wPeople.insert("小明","170");
wPeople.insert("小王","176");
wPeople.insert("小王","172");
QMapIterator i_r(wPeople);
for(i_r.toFront();i_r.hasNext();){
    //键可以直接拿
    qDebug()<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第14张图片

QHash 

 数据插入

QHash moneyHash;
moneyHash.insert(1,"一块钱");
moneyHash.insert(2,"十块钱");
moneyHash.insert(10,"三块钱");
moneyHash[50]="五十块钱";
//插入重复键需要使用insertMulti方法,否则就会被旧值会被新值覆盖
moneyHash.insertMulti(50,"一百块钱");
qDebug()<

Java风格遍历

QHash moneyHash;
moneyHash.insert(1,"一块钱");
moneyHash.insert(2,"十块钱");
moneyHash.insert(10,"三块钱");
moneyHash[50]="五十块钱";
//插入重复键需要使用insertMulti方法,否则就会被旧值会被新值覆盖
moneyHash.insertMulti(50,"一百块钱");
QHashIterator it_mr(moneyHash);
qDebug()<<"只读正遍历";
for(it_mr.toFront();it_mr.hasNext();){
    qDebug()<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第15张图片

QVariant 

QVariant类是Qt的共用体union数据类型,不仅能保存很多Qt类型的值,包括QColor,QBrush,QFont,QRect,QString及QSize等等,而且能存放Qt的容器类型值。

可采用toT()将QVariant对象转换称为T类型并获取其值。如toInt(),toFloat(),toString(),可用type方法获取数据类型,判断数据是否可。对于GUI模块中定义的数据类型没有相应的转换函数,即没有toColor(),没有toImage()这样的函数提供,可通过value()方法实现转换,判断两种类型是否可以转换时可通过canConvert()方法的返回值判断。

基本数据类型

QVariant vNum(100);
qDebug()<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第16张图片

GUI数据类型

 

QColor c =QColor(Qt::red);
QVariant vC=c;
qDebug()<();

canConvert( )与convert( )方法

 canConvert( )方法返回的是转换能力,也就是是否有转换成要求类型的能力,例如canConvert(QVariant::int)返回的就是true,canConvert(QVariant::QColor)返回的就是false

convert( )是将调用类型转换成要求的类型,如果不能转换,例如“Hello"要转int就会失败,同时转换失败会将调用者清空数据。

QVariant vss="Hello";
//转换

//canConvert返回的是函数转换的能力(例如是否有转换成int类型的能力),
//但不一定能转换成功,还要根据提供的数据

qDebug()<

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant_第17张图片

 

 

 

你可能感兴趣的:(QT,C/C++,qt,开发语言,windows,微软,c++)