我在做我的控制器。當我點擊我的ListWidget的項目,下面的方法被稱爲:Qt - 哈希表包含不正確的值
void ContactBookController::setCurrentlySelectedItem(QListWidgetItem *item)
{
setCurrentItem(*item);
m_window.setEditButtonsState(true);
}
而且setCurrentItem()
方法如下:(m_current_item
爲私有變量):
void ContactBookController::setCurrentItem(const QListWidgetItem ¤t_item)
{
m_current_item = current_item;
}
現在,當我創建一個聯繫人,我添加一個項目到QListWidget
,但我也創建了一個Contact
對象,但我也將它們綁定在一起,所以我知道QListWidgetItem
對應於什麼Contact
。總之,這裏是我做過什麼:
void ContactBookController::createContact()
{
auto new_contact = m_contact_book.createContact();
if(new_contact != nullptr)
{
new_contact->setName(tr("New contact"));
}
auto list_item = m_window.createContact(new_contact->getName());
m_window.clearSelection();
m_contact_map.insert(list_item, new_contact);
}
現在,在QListWidgetItem
點擊時,我激活編輯按鈕,我想獲取相應的Contact
對象。但是,這樣做時,Contact
對象似乎不正確。事實上,如果我使用他的方法(如getName()
),我的應用程序立即崩潰。
這裏是我做過什麼:
void ContactBookController::editContact()
{
auto list_item = m_current_item;
auto contact = m_contact_map.value(&list_item); /* doesn't work */
}
我的哈希表被宣佈爲:
QHash<QListWidgetItem*, Contact*> m_contact_map;
任何想法,我做錯了什麼?