2010-03-18 70 views
5

我有一個繼承自QWidget的類,現在該類將創建一個QListView對象並填充要查看的項目。 當列表視圖中的項目選擇發生變化時,我想獲取selectionChange事件。如何獲取Qt中的selectionchange事件

我該如何做到這一點?請簡單告訴我。

回答

8

當你有一個觀點,你將有將被用來選擇項目的典範。它被稱爲QItemSelectionModel

例如,您QListView,你可以得到selectionModel的是這樣的:

QItemSelectionModel* selectionModel() const; 

現在,從這個模型,你就可以在許多信號連接:

void currentChanged (const QModelIndex & current, const QModelIndex & previous) 
void currentColumnChanged (const QModelIndex & current, const QModelIndex & previous) 
void currentRowChanged (const QModelIndex & current, const QModelIndex & previous) 
void selectionChanged (const QItemSelection & selected, const QItemSelection & deselected) 

我認爲這會對你有所幫助!

+0

安迪..它得到了工作..泰克很多..但我遇到了一些其他問題的麻煩,即,如果我做按鍵事件listviewitem按鍵事件並沒有coming.even雖然我已經超越了「keyPressEvent」方法仍然我不是獲得活動..如何將按鍵事件安裝到列表視圖? 謝謝 – Naruto 2010-03-18 14:50:24

+0

這就是我猜想的事件的問題,您似乎不得不使用不同的「種類」事件......對於信號和插槽,您只是不在乎選擇如何變化,它只是讓您知道它何時發生變化。 ..無論如何,我會建議在你的列表視圖中添加一個eventfilter ...看看這裏:http://stackoverflow.com/questions/1785251/problem-filtering-mousepressevent-with-installeventfilter/1785307#1785307 – 2010-03-18 15:23:45

+0

謝謝,我會研究這一點,如果我有任何問題,我會回覆給你,謝謝。 – Naruto 2010-03-19 14:41:02

0

http://doc.trolltech.com/4.6/qlistwidget.html您可能想使用QListWidget而不是視圖,我不記得具體的原因,但這個類有這些信號,你想使用。


http://doc.trolltech.com/4.6/qlistwidget.html#itemSelectionChanged 這是你必須連接到信號。

做一個插槽中的類聲明:

private slots: 
    void selChanged(); 

填補這個插槽與要被選擇後,換做什麼。 將信號連接到類中的某個位置 - 也許在QWidget派生的構造函數中。

connect(yourListWidget, SIGNAL(itemSelectionChanged()), this, SLOT(selChanged())); 

就是這樣

+0

我試過你建議它沒有來的方式..連接返回false和一件事,Qt文件說selectionchaged是一個虛擬插槽,我試圖通過重寫插槽..仍然沒有來.. 我不'沒有什麼是錯的。你能幫助 – Naruto 2010-03-18 09:23:14

+0

我修改了我的答案。它現在應該工作。 – 2010-03-18 15:52:29