2010-03-18 25 views
5

Tôi có một lớp được kế thừa từ QWidget, bây giờ trong lớp đó tôi sẽ tạo một đối tượng QListView và lấp đầy các mục cần xem. Khi việc chọn các mục trong chế độ xem danh sách được thay đổi, tôi muốn nhận sự kiện selectionChange.Cách lấy sự kiện selectionchange trong Qt

Tôi làm cách nào để đạt được điều này ?. Xin vui lòng cho tôi biết trong ngắn gọn.

Trả lời

8

Khi bạn có một cái nhìn, bạn sẽ có một mô hình sẽ được sử dụng để chọn mục. Nó được gọi là QItemSelectionModel.

Ví dụ, với QListView của bạn, bạn có thể lấy selectionModel theo cách này:

QItemSelectionModel* selectionModel() const; 

Bây giờ, từ mô hình đó, bạn sẽ có thể kết nối trên nhiều tín hiệu:

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) 

Tôi nghĩ rằng nó sẽ giúp bạn một chút!

+0

andy .. nó đã làm việc .. thaks rất nhiều .. nhưng tôi đang gặp rắc rối với một số vấn đề khác tức là, nếu tôi làm nhấn phím trên sự kiện keyview listviewitem không đến.even mặc dù tôi có overrden các phương pháp "keyPressEvent" tôi vẫn không nhận được sự kiện .. làm thế nào để cài đặt sự kiện nhấn phím để listview? Cảm ơn – Naruto

+0

Đó là vấn đề với sự kiện tôi đoán, có vẻ như bạn phải sử dụng các loại sự kiện khác nhau ... Với tín hiệu và vị trí, bạn không quan tâm lựa chọn thay đổi như thế nào, nó chỉ cho bạn biết khi nào thay đổi. .. Dù sao, tôi sẽ đề nghị để thêm một eventfilter trên listview của bạn ... Có một cái nhìn ở đây: http://stackoverflow.com/questions/1785251/problem-filtering-mousepressevent-with-installeventfilter/1785307#1785307 –

+0

cảm ơn, tôi sẽ xem xét điều này, nếu tôi có bất kỳ vấn đề tôi sẽ lấy lại cho bạn, cảm ơn bạn. – Naruto

0

http://doc.trolltech.com/4.6/qlistwidget.html Bạn có thể muốn sử dụng QListWidget thay vì xem, tôi không nhớ cụ thể lý do tại sao, nhưng lớp này có các tín hiệu bạn muốn sử dụng.


http://doc.trolltech.com/4.6/qlistwidget.html#itemSelectionChanged Đây là tín hiệu bạn phải kết nối.

Thực hiện một khe trong khai báo lớp của bạn:

private slots: 
    void selChanged(); 

Fill khe này với những gì bạn muốn làm khi thay đổi lựa chọn. Kết nối tín hiệu với khe này ở đâu đó trong lớp học của bạn - có thể là trong hàm tạo của đạo hàm QWidget của bạn.

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

đó là nó

+0

tôi đã thử cách bạn đề xuất không đến .. kết nối trở lại sai và một điều nữa, Qt doc nói selectionchaged là một khe ảo, tôi đã cố gắng bằng cách ghi đè vị trí .. vẫn không đến. i don ' t không có gì sai. bạn có thể xin giúp đỡ – Naruto

+0

Tôi đã sửa đổi câu trả lời của tôi. nó sẽ hoạt động ngay bây giờ. –