Qt学习笔记1 QHash类、QMap类与QVariant类

QHash类、QMap类与QVariant类

目录

1.QHash与QMap

QMap与QHash的差别:

QHash具有比QMap更快的查找速度
QHash以任意的顺序存储数据项,而QMap总是按照键Key顺序存储数据
QHash的键类型Key必须提供operator==()和一个全局的qHash(Key)函数,而QMap的键类型Key必须提供operator<()函数。

1

2.对QHash与QMap容器的遍历

Java风格迭代器数据类型:一种提供只读访问 一种提供读写访问
maps

STL风格迭代器数据类型:一种提供只读访问 一种提供读写访问
hash

/*
 * 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;
}

map

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;
}

rae

QVariant::type常用的枚举类型
Qvariant

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Erice_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值