可以直接添加元素,也可也使用append( )方法在末尾追加元素
QStringList weekList<<"星期一"<<"星期二"<<"星期三";
weekList.append("星期四");
qDebug()<
for循环遍历
QStringList weekList<<"星期一"<<"星期二"<<"星期三";
for(int i=0;i
foreach遍历
QStringList weekList<<"星期一"<<"星期二"<<"星期三";
foreach (QString s, weekList) {
qDebug()<
迭代器遍历
QStringList weekList<<"星期一"<<"星期二"<<"星期三";
QStringList::iterator iter=weekList.begin();
for(;iter!=weekList.end();++iter){
qDebug()<<*iter;
}
QStringList weekList<<"星期一"<<"星期二"<<"星期三";
//字符串类型的链表迭代器
QListIterator itr(weekList);
while(itr.hasNext()){
qDebug()<
使用contains( )方法可以查找数组中是否包含该字符串
QStringList weekList<<"星期一"<<"星期二"<<"星期三";
qDebug()<<"链表中有星期二:"<
使用insert( )方法可以向链表中插入元素,insert( )方法第一个参数表示插入的位置,第二个参数表示要插入的数据
QStringList weekList<<"星期一"<<"星期二"<<"星期三";
weekList.insert(4,"星期五");
qDebug()<
removeFirst( )方法可以删除链表头
removeLast( )方法可以删除链表尾
removeOne(str)方法可以删除指定元素
removeAt(int)可以删除指定位置元素
clear( )方法可以清空链表
QStringList weekList<<"星期一"<<"星期二"<<"星期二"<<"星期二"<<"星期三"<<"星期四"<<"星期五";
qDebug()<
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:"<
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()<
QMap与QHash差别:
①QHash比QMap查找速度更快。
②QHash以任意顺序存储,QMap以Key顺序存储数据。
③QHash的Key必须提供operator==()及一个全局的qHash(Key)函数,而QMap的Key必须提供operator<()函数。
存储一键多值数据时可使用QMultiMap
Java风格迭代器
容器类 |
只读迭代器 |
读写迭代器 |
QMap |
QMapIterator |
QMutableMapIterator |
QHash |
QHashIterator |
QMutableHashIterator |
STL风格迭代器
容器类 |
只读迭代器 |
读写迭代器 |
QMap |
QMap |
QMap |
QHash |
QHash |
QHash |
QMap infoMap;
//数据添加
infoMap.insert("小明","168cm");//直接传键值对
infoMap.insert("小张","170cm");
infoMap["小丽"]="168cm";
qDebug()<
QMap infoMap;
//数据添加
infoMap.insert("小明","168cm");//直接传键值对
infoMap.insert("小张","170cm");
infoMap["小丽"]="168cm";
//通过key,找value
qDebug()<<"小明的身高:"<
只读迭代器遍历
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:"<
使用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:"<
只读迭代器遍历
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:"<
读写迭代器
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:"<
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()<
只读迭代器遍历
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()<
数据插入
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()<
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()<
QColor c =QColor(Qt::red);
QVariant vC=c;
qDebug()<();
canConvert( )方法返回的是转换能力,也就是是否有转换成要求类型的能力,例如canConvert(QVariant::int)返回的就是true,canConvert(QVariant::QColor)返回的就是false
convert( )是将调用类型转换成要求的类型,如果不能转换,例如“Hello"要转int就会失败,同时转换失败会将调用者清空数据。
QVariant vss="Hello";
//转换
//canConvert返回的是函数转换的能力(例如是否有转换成int类型的能力),
//但不一定能转换成功,还要根据提供的数据
qDebug()<