QHash的使用

开发环境:

QT 5.0.2  MinGW 32bit


这里主要讨论key为QString,value为结构体指针类型的QHash。例如:

QHash<QString, QUserInfo*> m_hash;

一:在工程中添加新类:

“添加新文件”-》“C++”->"C++类",生成文件quserinfo.h和quserinfo.cpp。

quserinfo.h:

#ifndef QUSERINFO_H
#define QUSERINFO_H
 
#include <QString>
class QUserInfo
{
public:
    QUserInfo();
 
    QString getName();
    void setName(const QString sName);
 
private:
    QString m_sName;
 
};
 
#endif // QUSERINFO_H
 
quserinfo.cpp: 
 

#include "quserinfo.h"
 
QUserInfo::QUserInfo()
{
}
 
QString QUserInfo::getName()
{
    return m_sName;
}
void QUserInfo::setName(const QString sName)
{
    m_sName = sName;
}
 

二:在×××.h文件中

#include "quserinfo.h"
并在类中添加:

QHash<QString, QUserInfo*> m_hash;


三:在×××.cpp文件中

添加item

for (int i = 0; i < 10; i++)
{
    QString sName = QString("name%1").arg(i);
    pUserInfo = new QUserInfo();
    pUserInfo->setName(sName);
    m_hash.insert(sName, pUserInfo);
}


遍历:

QHash<QString, QUserInfo*>::const_iterator i = m_hash.constBegin();
while (i != m_hash.constEnd()) 
{
    qDebug() << i.key() << ": " << i.value() << endl;
    ++i;
}
 

一个个删除节点:

QHash<QString, QUserInfo*>::const_iterator j = m_hash.constBegin();
QHash<QString, QUserInfo*>::const_iterator delIndex = j;
while ((delIndex = j) != m_hash.constEnd()) 
{
    qDebug() << delIndex.key();
    QUserInfo* userInfo = (QUserInfo*)delIndex.value();
    
    if (userInfo != NULL)
    {
        delete userInfo;
        userInfo = NULL;
    }
    ++j;
    
    m_hash.remove(delIndex.key());
}
 

删除全部节点:

QHash<QString, QUserInfo*>::const_iterator j = m_hash.constBegin();
while (j != m_hash.constEnd()) 
{
    qDebug() << j.key();
    QUserInfo* userInfo = (QUserInfo*)j.value();
    
    if (userInfo != NULL)
    {
        delete userInfo;
        userInfo = NULL;
    }
    ++j;
}
m_hash.clear();

注意:如果是new出来的哈希指针,在clear()之后最好delete一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值