2013-03-05 16 views
10

我有一個QDialog的,用Qt Designer創建的,看起來像這樣:Dialog當QListView選擇由於鍵盤活動而改變時發出信號?

左邊的服務器列表是一個QStringListModel一個而QListView。鼠標點擊列表視圖中的項目通過將視圖的激活(QModelIndex)信號連接到對話框中的插槽功能來更新帶有所選項目信息的表格。

但是,按下鍵盤上的按鈕也會更改所選項目,但不會發出信號,因此表格未更新以匹配所選項目。這怎麼解決?

回答

20

activated(QModelIndex)信號實際上指的不僅僅是選擇行爲。這個概念相當模糊,但更像是一種明確選擇的行爲。如果您只是在查找當前選擇已更改的通知,則可以抓取選擇模型並連接到其更新。

MyView::MyView() { 
    QListView* view = new QListView(this); 
    connect(view->selectionModel(), 
     SIGNAL(selectionChanged(QItemSelection,QItemSelection)), 
     this, SLOT(handleSelectionChanged(QItemSelection))); 
} 

... 

MyView::handleSelectionChanged(const QItemSelection& selection){ 
    if(selection.indexes().isEmpty()) { 
     clearMyView(); 
    } else { 
     displayModelIndexInMyView(selection.indexes().first()); 
    } 
} 

在上面的代碼,displayModelIndexInMyView(QModelIndex)應該與目前的處理器插槽更換爲activated(QModelIndex),換成clearMyView()有什麼,那就是你想做的事時,沒有什麼選擇。

有很多方法可以做到這一點,老實說我不確定什麼是規範的,但我認爲這會對你有用。

+0

感謝您的答覆,但我可以得到信號/插槽連接。在運行時我得到以下錯誤:「沒有這樣的插槽ConnectDialog :: handleSelectionChanged(QItemSelection)」。該功能存在,看起來就像你的...任何想法? – 2013-03-05 03:55:10

+0

當你在頭文件中聲明它時,是否將它放在'private slots:'下面? – cgmb 2013-03-05 04:16:52

+0

D'oh ...不,我沒有。感謝您的幫助! – 2013-03-05 04:35:38

0

另一種方式是實現QListView::currentChanged(...)虛函數。

相關問題