2010-11-23 21 views
14

Formumda, kontrol edilebilir QListWidgetItems içeren bir QListWidget'i var. Kontrol edilen/işaretlenmemiş bir QListWidgetItem olayını yakalamanın bir yolunu arıyorum. Bunun için böyle bir sinyal görmüyorum ama yanılıyor olabilirim. Şu anda yapmakta olduğum QListWidget :: itemClicked() sinyalini kullanmak ve QListWidgetItem'in checkState'ini kontrol etmek istiyorum, ancak istediğim bu değil çünkü bu olay öğeye tıklandığında her seferinde gerçekleşir, sadece onay işareti değiştirildi değil . Birileri yardım edebilir mi? Teşekkürler!Qt/C++: Bir QListWidgetItem işaretlendiğinde kullanılan sinyal?

+1

Bir öğeyi işaretlediğimde veya işaretini kaldırdığımda tetiklenen QListWidget :: itemChanged() sinyalini kullanarak bunu aşabileceğimi düşünüyorum, ancak öğenin değerini düzenlerseniz de tetiklenir. şimdi yapmıyor, hala kusurlu bir çözüm. – Joseph

+1

QListWidget :: itemClicked() 'ile ilgili bir başka sorun, klavye kullandığınızda yanmıyor olmasıdır; ör., Kontrol edilen durumu değiştirmek için Space tuşunu kullanın. – Hossein

cevap

18

Görünüşe göre böyle bir sinyal sağlanmadıysa, en iyi bahsiniz QListWidget::itemChanged(QListWidgetItem* item)'u kullanmak ve elde edilen sonucu item->checkState() taramaktır. Bu, itemClicked

+0

Bu korunan bir sinyaldir. Açıklandığı gibi bu hatayı kullandığımda bir hatayla karşılaşacağım [https://stackoverflow.com/q/48059796/1080355]. – VSB

0

kullanımı hakkında ufak bir iyileştirme olmalıdır. Ek bir seçenek, QListView ile kendi QAbstractListModel'unuzu kullanmaktır. İlk önce kendi yönetim kodunuzu eklemeniz gereken bazı ekstra kodlar ekler. Ancak daha düşük seviyeli bir erişim elde edersiniz. Temel olarak QListView modelinize ne yapması gerektiğini sorar. Aynı zamanda girişi tekrar çağırabileceğiniz liste modelinize de aktarır.

Alternatif olarak, QStandardItemModel alt sınıfını seçebilir ve onay kutusunu değiştirmeyle ilgili belirli düzenlemeleri yakalayabilirsiniz.