前言:QHash是QT类库中的一个容器类,内部维护了一张哈希表。QHash的内部哈希表每次翻倍增长,同时所有的内部元素都重新分配到桶内。计算公式为qHash(key)%QHash::capacity() (桶的个数)。下面通过一个例子,来说明QHash类的使用。
哈希表是什么,哈希表该如何学习,哈希表在QT中的应用举例有哪些?
哈希表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
QHash是QT类库中的一个容器类,内部维护了一张哈希表。QHash的内部哈希表每次翻倍增长,同时所有的内部元素都重新分配到桶内。计算公式为qHash(key)%QHash::capacity() (桶的个数)。下面通过一个例子,来说明QHash类的使用。
这个例子中的主窗口,类似QQ的好友列表,双击一个好友,弹出聊天对话框,标题显示chat with +列表框中的内容。多次双击同一个好友,应该只有第一次弹对话框。
代码为:
QString id = ui->listWidget->currentItem()->text();
ChatDialog *dialog = new ChatDialog(id, this);
dialog->show();
当多次双击同一个列表项时,如下图所示,同样的窗口弹出了多个,逻辑上不合理。

为了解决这个问题,需要用到哈希表,用到QHash类。
实现过程如下:
1) 首先,需要在界面类中,引入头文件.
#include <QHash>
2) 在类中加入一个私有成员:
QHash<QString, ChatDialog *> chatFormHash;
3) 做信号和槽的关联
QObject::connect(ui->listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)),this, SLOT(newWindow()));
4) 实现newWindow()函数
QString id = ui->listWidget->currentItem()->text();
ChatDialog *dialog;
if (this->chatFormHash.contains(id))
{
dialog = chatFormHash.value(id);
}
else
{
dialog = new ChatDialog(id, this);
this->chatFormHash.insert(id, dialog);
}
dialog->show();
列表框中的列表项字符串,作为哈希表中的key值,聊天窗口的地址做为哈希表的value.当哈希表中没有某个key时,创建一个新窗口。当第二次,双击同一个列表项时,直接从哈希表中查找窗口的地址即可,不需要再次创建,就解决了上面的问题。界面如下:

文章出自:http://qh.itpxw.cn/peixun/software/201842407.html
文章标题:哈希表是什么
免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员
用户级别:10
机构名称:IT培训网
联 系 人:罗老师
联系电话:13783581536
联系手机:13783581536
在线客服:
在 线 QQ:
电子邮件:
网站域名:http://www.itpxw.cn
注册时间:2016-07-18 11:07
最后登录:2024-02-20 13:02
Java定义方法的格式是什么?IT培训网小编来告诉大家。所谓方法...
大家在Java教程中会学到关于Java消息推送的知识,那么,Java消息...
常用的Java日期格式转换有哪些?IT培训网小编来告诉大家。 1...
Java创建对象数组的方法是什么?IT培训网小编来告诉大家。Ja...