Qt容器类
By Xchen 20160629
Qt提供一组通用的基于模板的容器类。
常见的Qt容器类为QListQ、LinkedList、QVector、QMap、QHash。
Qt容器类的两种风格迭代器
- Java-style iterators
- STL- style iterators
example01: QList & QListIterator只读迭代器Java
#include <QDebug>
int main(int argc,char *argv[])
{
QList<int> list;
list<<1<<2<<3<<4<<5;
QListIterator<int> i(list);
for(;i.hasNext();)
qDebug()<<i.next();
return 0;
}
example02: QList & QMutableListIterator读写迭代器Java
#include <QDebug>
int main(int argc,char *argv[])
{
QList<int> list;
QMutableListIterator<int> i(list);
for(int j=0;j<10;++j)
i.insert(j);
for(i.toFront();i.hasNext();)
qDebug()<<i.next();
for(i.toBack();i.hasPrevious();)
{
if(i.previous()%2==0)
i.remove();
else
i.setValue(i.peekNext()*10);
}
for(i.toFront();i.hasNext();)
qDebug()<<i.next();
return 0;
}
example03: QList & QList::iterator迭代器STL
#include <QDebug>
int main(int argc,char *argv[])
{
QList<int> list;
for(int j=0;j<10;j++)
list.insert(list.end(),j);
QList<int>::iterator i;
for(i=list.begin();i!=list.end();++i)
{
qDebug()<<(*i);
*i=(*i)*10;
}
QList<int>::const_iterator ci;
for(ci=list.constBegin();ci!=list.constEnd();++ci)
qDebug()<<*ci;
return 0;
}
example04: QMap & QMapIterator & QMutableMapIterator迭代器Java
#include <QDebug>
int main(int argc,char *argv[])
{
QMap<QString,QString> map;
map.insert("beijing","111");
map.insert("shanghai","021");
map.insert("nanjing","025");
QMapIterator<QString,QString> i(map);
for(;i.hasNext();)
qDebug()<<" "<<i.key()<<" "<<i.next().value();
QMutableMapIterator<QString,QString> mi(map);
if(mi.findNext("111"))
mi.setValue("010");
QMapIterator<QString,QString> modi(map);
qDebug()<<" ";
for(;modi.hasNext();)
qDebug()<<" "<<modi.key()<<" "<<modi.next().value();
return 0;
}
example05: QMap::iterator & QMap::const_iterator迭代器STL
#include <QDebug>
int main(int argc,char *argv[])
{
QMap<QString,QString> map;
map.insert("beijing","111");
map.insert("shanghai","021");
map.insert("nanjing","025");
QMap<QString,QString>::const_iterator i;
for(i=map.constBegin();i!=map.constEnd();++i)
qDebug()<<" "<<i.key()<<" "<<i.value();
QMap<QString,QString>::iterator mi;
mi=map.find("beijing");
if(mi!=map.end())
mi.value()="010";
QMap<QString,QString>::const_iterator modi;
qDebug()<<" ";
for(modi=map.constBegin();modi!=map.constEnd();++modi)
qDebug()<<" "<<modi.key()<<" "<<modi.value();
return 0;
}
example06: QVariant
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QVariant v(709);
qDebug()<<v.toInt();
QVariant w("How are you! ");
qDebug()<<w.toString();
QMap<QString,QVariant>map;
map["int"]=709;
map["double"]=709.709;
map["string"]="How are you! ";
map["color"]=QColor(255,0,0);
qDebug()<<map["int"]<< map["int"].toInt();
qDebug()<<map["double"]<< map["double"].toDouble();
qDebug()<<map["string"]<< map["string"].toString();
qDebug()<<map["color"]<< map["color"].value<QColor>();
QStringList sl;
sl<<"A"<<"B"<<"C"<<"D";
QVariant slv(sl);
if(slv.type()==QVariant::StringList)
{
QStringList list=slv.toStringList();
for(int i=0;i<list.size();++i)
qDebug()<<list.at(i);
}
}
Widget::~Widget()
{
}
example07: QtAlgorithm和QtGlobal模块中包含的函数和算法
#include <QDebug>
int main(int argc,char *argv[])
{
double a=-19.3,b=9.7;
double c=qAbs(a); //c=19.3
double max=qMax(b,c); //max=c=19.3
int bn=qRound(b); //bn=10
int cn=qRound(c); //cn=19
qDebug()<<"a="<<a;
qDebug()<<"b="<<b;
qDebug()<<"c=qAbs(a)= "<<c;
qDebug()<<"qMax(b,c)= "<<max;
qDebug()<<"bn=qRound(b)= "<<bn;
qDebug()<<"cn=qRound(c)= "<<cn;
qSwap(bn,cn);
qDebug()<<"qSwap(bn,cn):"<<"bn="<<bn<<" cn="<<cn;
return 0;
}