QHash类、QMap类与QVariant类
目录
1.QHash与QMap
QMap与QHash的差别:
QHash具有比QMap更快的查找速度
QHash以任意的顺序存储数据项,而QMap总是按照键Key顺序存储数据
QHash的键类型Key必须提供operator==()和一个全局的qHash(Key)函数,而QMap的键类型Key必须提供operator<()函数。
2.对QHash与QMap容器的遍历
Java风格迭代器数据类型:一种提供只读访问 一种提供读写访问
STL风格迭代器数据类型:一种提供只读访问 一种提供读写访问
/*
* author:binbinzhang
* date:2018.4.21
* email:binbin_Erices@163.com
* version:1.0002
*
**/
int main(int argc,char** argv)
{
QMap<QString,QString> map;
map.insert("beijing","123");
map.insert("shanghai","021");
map.insert("chagsha","731");
map.insert("bengbu","552");
/************************** Java风格迭代器遍历容器 **************************/
/*
* 因为在输出键的时候,不需要是迭代点移动到下一个位置,所以调用QMapIterator<T,T>::Key();
* 因而在输出值的时候调用了QMapIterator<T,T>::next()
*/
QMapIterator<QString,QString> i(map);
for(;i.hasNext();)
qDebug()<<"\t"<<i.key()<<"\t"<<i.next().value();
QMutableMapIterator<QString,QString> mi(map);
if(mi.findNext("731"))
mi.setValue("666");
qDebug()<<"------------------ 分隔符 ------------------";
QMapIterator<QString,QString> modi(map);
for(;modi.hasNext();)
qDebug()<<"\t"<<modi.key()<<"\t"<<modi.next().value();
qDebug()<<" ";
/************************** STL 风格迭代器遍历容器 **************************/
/*
* STL通过查找键来实现值的修改
* 只读访问 QMap<T,T>::const_iterator
* 读写访问 QMap<T,T>::iterator
*
*/
QMap<QString,QString>::iterator im;
for(im=map.begin();im!=map.end();im++)
qDebug()<<"\t"<<im.key()<<"\t"<<im.value();
im = map.find("bengbu");
if(im!=map.end())
{
im.value()="010";
}
qDebug()<<"------------------ 分隔符 ------------------";
QMap<QString,QString>::const_iterator cim;
for(cim=map.cbegin();cim!=map.cend();cim++)
qDebug()<<"\t"<<cim.key()<<"\t"<<cim.value();
return 0;
}
3.QVariant类
QVariant类似于C++的Union数据类型,不仅可以保存很多的Qt类型的值,还可以存放Qt的容器类型的值。Qt的很多功能都是建立在QVariant的基础上的(Qt的对象属性及数据库功能等)
/*
* author:binbinzhang
* date:2018.4.21
* email:binbin_Erices@163.com
* version:1.0002
*
**/
#include <QVariant>
#include <QColor>
#include <QLabel>
#include <QDateTime>
int main(int argc,char** argv)
{
QVariant v(809);
qDebug()<<v.toInt();
QVariant v1("hello world");
qDebug()<<v1.toString();
QMap<QString,QVariant> map;
map["int"]=709;
map["double"]=86.16;
map["String"]="hello bin";
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<<"aa"<<"bb"<<"dd"<<"gg";
QVariant varlist(sl);
if(varlist.type()==QVariant::StringList)
{
QStringList list=varlist.toStringList();
for(int i=0;i<list.size();i++)
qDebug()<<list[i]<<" "<<list.at(i);
}
return 0;
}
QVariant::type常用的枚举类型