国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

Hi,歡迎來(lái)到嵌入式培訓(xùn)高端品牌 - 華清遠(yuǎn)見(jiàn)教育科技集團(tuán)<北京總部官網(wǎng)>,專(zhuān)注嵌入式工程師培養(yǎng)15年!
當(dāng)前位置: > 華清遠(yuǎn)見(jiàn)教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > 哈希表在QT中的應(yīng)用舉例
哈希表在QT中的應(yīng)用舉例
時(shí)間:2017-01-05作者:華清遠(yuǎn)見(jiàn)

哈希表,是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪(fǎng)問(wèn)的數(shù)據(jù)結(jié)構(gòu)。也就是說(shuō),它通過(guò)把關(guān)鍵碼值映射到表中一個(gè)位置來(lái)訪(fǎng)問(wèn)記錄,以加快查找的速度。

QHash是QT類(lèi)庫(kù)中的一個(gè)容器類(lèi),內(nèi)部維護(hù)了一張哈希表。QHash的內(nèi)部哈希表每次翻倍增長(zhǎng),同時(shí)所有的內(nèi)部元素都重新分配到桶內(nèi)。計(jì)算公式為qHash(key)%QHash::capacity() (桶的個(gè)數(shù))。下面通過(guò)一個(gè)例子,來(lái)說(shuō)明QHash類(lèi)的使用。

這個(gè)例子中的主窗口,類(lèi)似QQ的好友列表,雙擊一個(gè)好友,彈出聊天對(duì)話(huà)框,標(biāo)題顯示chat with +列表框中的內(nèi)容。多次雙擊同一個(gè)好友,應(yīng)該只有第一次彈對(duì)話(huà)框。

代碼為:

QString id = ui->listWidget->currentItem()->text();
        ChatDialog *dialog = new ChatDialog(id, this);
        dialog->show();

當(dāng)多次雙擊同一個(gè)列表項(xiàng)時(shí),如下圖所示,同樣的窗口彈出了多個(gè),邏輯上不合理。

為了解決這個(gè)問(wèn)題,需要用到哈希表,用到QHash類(lèi)。

實(shí)現(xiàn)過(guò)程如下:

1) 首先,需要在界面類(lèi)中,引入頭文件.

#include <QHash>

2) 在類(lèi)中加入一個(gè)私有成員:

QHash<QString, ChatDialog *> chatFormHash;

3) 做信號(hào)和槽的關(guān)聯(lián)

QObject::connect(ui->listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)),this, SLOT(newWindow()));

4) 實(shí)現(xiàn)newWindow()函數(shù)

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();

列表框中的列表項(xiàng)字符串,作為哈希表中的key值,聊天窗口的地址做為哈希表的value.當(dāng)哈希表中沒(méi)有某個(gè)key時(shí),創(chuàng)建一個(gè)新窗口。當(dāng)?shù)诙危p擊同一個(gè)列表項(xiàng)時(shí),直接從哈希表中查找窗口的地址即可,不需要再次創(chuàng)建,就解決了上面的問(wèn)題。界面如下:

發(fā)表評(píng)論
評(píng)論列表(網(wǎng)友評(píng)論僅供網(wǎng)友表達(dá)個(gè)人看法,并不表明本站同意其觀(guān)點(diǎn)或證實(shí)其描述)