久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育科技集團<北京總部官網>,專注嵌入式工程師培養15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 哈希表在QT中的應用舉例
哈希表在QT中的應用舉例
時間:2017-01-05作(zuo)者:華清(qing)遠見(jian)

哈希表,是根據(ju)關鍵碼值(zhi)(Key value)而直接進行訪問(wen)的(de)數據(ju)結構。也就是說,它通過把關鍵碼值(zhi)映(ying)射到表中一個位置來訪問(wen)記(ji)錄,以加快查找的(de)速度。

QHash是(shi)QT類庫(ku)中的(de)一(yi)個(ge)容器(qi)類,內(nei)部(bu)維護(hu)了一(yi)張哈(ha)希表。QHash的(de)內(nei)部(bu)哈(ha)希表每次翻倍增長(chang),同時所有的(de)內(nei)部(bu)元素都重新分配到桶內(nei)。計算公式為qHash(key)%QHash::capacity() (桶的(de)個(ge)數)。下面通過(guo)一(yi)個(ge)例子,來說明QHash類的(de)使用。

這個例子中的(de)主窗口,類(lei)似QQ的(de)好友(you)列表,雙擊(ji)一(yi)個好友(you),彈出聊天對(dui)話框(kuang),標題顯示chat with +列表框(kuang)中的(de)內(nei)容。多次(ci)雙擊(ji)同(tong)一(yi)個好友(you),應(ying)該只(zhi)有第一(yi)次(ci)彈對(dui)話框(kuang)。

代碼為:

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

當(dang)多(duo)次雙擊同一個列表項時(shi),如下圖所(suo)示,同樣的窗口彈出了(le)多(duo)個,邏輯(ji)上不合(he)理。

為了解決這(zhe)個問題,需(xu)要(yao)用到(dao)哈希表,用到(dao)QHash類。

實現過程如下:

1) 首先,需要(yao)在界面(mian)類中,引入(ru)頭文件.

#include <QHash>

2) 在類中加(jia)入(ru)一個私有成員:

QHash<QString, ChatDialog *> chatFormHash;

3) 做(zuo)信號和槽的關(guan)聯

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

4) 實現newWindow()函(han)數

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

列表(biao)框(kuang)中的(de)列表(biao)項(xiang)字符串,作為(wei)哈希(xi)表(biao)中的(de)key值(zhi),聊天窗(chuang)口(kou)的(de)地址(zhi)(zhi)做為(wei)哈希(xi)表(biao)的(de)value.當哈希(xi)表(biao)中沒有某(mou)個(ge)key時,創建一個(ge)新窗(chuang)口(kou)。當第(di)二次,雙擊同一個(ge)列表(biao)項(xiang)時,直接從哈希(xi)表(biao)中查找窗(chuang)口(kou)的(de)地址(zhi)(zhi)即可,不需要再(zai)次創建,就解決(jue)了上面的(de)問(wen)題。界(jie)面如下:

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)