• <code id="zjelh"></code>

          <source id="zjelh"><form id="zjelh"></form></source><acronym id="zjelh"><form id="zjelh"><blockquote id="zjelh"></blockquote></form></acronym>

          1. <acronym id="zjelh"><form id="zjelh"></form></acronym>

            <input id="zjelh"><rt id="zjelh"></rt></input>
            <var id="zjelh"><rt id="zjelh"></rt></var>
            <source id="zjelh"><form id="zjelh"><del id="zjelh"></del></form></source>
            Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育集團<北京總部官網>,專注嵌入式工程師培養15年!
            當前位置: > 華清遠見教育集團 > 嵌入式學習 > 講師博文 > 哈希表在QT中的應用舉例
            哈希表在QT中的應用舉例
            時間:2017-01-05作者:華清遠見

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

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