哈希表在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時,創建一個新窗口。當第二次,雙擊同一個列表項時,直接從哈希表中查找窗口的地址即可,不需要再次創建,就解決了上面的問題。界面如下:
發表評論
|