哈希表在QT中的应用举例
时间:2017-01-05作者:华清远见
哈希表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。 QHash是QT类库中的一个容器类,内部维护了一张哈希表。QHash的内部哈希表每次翻倍增长,同时所有的内部元素都重新分配到桶内。计算公式为qHash(key)%QHash::capacity() (桶的个数)。下面通过一个例子,来说明QHash类的使用。 这个例子中的主窗口,类似QQ的好友列表,双击一个好友,弹出聊天对话框,标题显示chat with +列表框中的内容。多次双击同一个好友,应该只有第一次弹对话框。 代码为:
QString id = ui->listWidget->currentItem()->text(); 当多次双击同一个列表项时,如下图所示,同样的窗口弹出了多个,逻辑上不合理。
为了解决这个问题,需要用到哈希表,用到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(); 列表框中的列表项字符串,作为哈希表中的key值,聊天窗口的地址做为哈希表的value.当哈希表中没有某个key时,创建一个新窗口。当第二次,双击同一个列表项时,直接从哈希表中查找窗口的地址即可,不需要再次创建,就解决了上面的问题。界面如下:
发表评论
|