2016-03-24 22 views
1

'dan tüm verileri alma Lütfen resme bakın. Alt widget bir liste widget'idir. Bu şekilde çalışır. Ekle düğmesine tıkladığınızda, yeni bir QListWidgetItem dinamik olarak alt ListWidget'e eklenir. Şimdi widget’ta üç öğe var. Her öğeninListWidgetItem PyQt4

enter image description here

Ben listWidgetItem gösteren herkes verileri almak gerekir .. lineEdit vb onay kutuları, ComboBoxes içerebilir. Ne yazık ki, listwidgetitem.text(), öğeden veri alabilmem için tek yoldur. Tüm bu verileri almak için ne yapmalı?

+0

Her bir ListWidget Öğesinin görüntülemek ve düzenlemek istediğiniz birden fazla veri parçasına sahip olduğunu mu söylüyorsunuz? –

cevap

1

Bunun için (genel olarak) QListItemWidget öğesini kullanmamalısınız, ancak bunun yerine uygun bir QAbstractItemModel alt sınıfını kullanmalısınız. Bununla birlikte, listwidget'inizi istediğiniz herhangi bir veriyle yedekleyebilir ve bu verilere erişebilirsiniz.

QAbstractItemModel'den gelen QStandardItemModel adlı bir yardımcı program sınıfı vardır ve hızlı başlatmanız gerekir.

Custom QStandardItemModel with custom data method

+0

Sadece bir CheckBox'ı öğe üyesi olarak içeren yukarıdaki çözümün bir örneğini gönderir misiniz? bağlantısından Yukarıdaki örnek 'PyQt4.QtCore.QVariant eşlenmiş tipini temsil eder ve – ameen

+0

Eğer QAbstractListModel diğer örneklerinde aradık var instantiated' olamaz hatası :(atar? Aynı zamanda çok iyi belgelenmiş olduğunu. İki – deets

+1

atlarsanız QVariant() 'ın oluşumları, örneğin sadece self.listdata [index.row()]' – ngulam

1

(tüm Ürün widget bunu desteklemek, gerçekten) bir QListWidgetItem üzerinde keyfi verilerin birden çok parça saklayabilir. Verileriniz için özel bir rol tanımlamanız gerekiyor.

Data1Role = QtCore.Qt.UserRole + 1 
Data2Role = QtCore.Qt.UserRole + 2 

item = QtGui.QListWidgetItem() 
item.setData(Data1Role, 'Any data') 
item.setData(Data2Role, 42) 

print item.data(Data1Role) 
# "Any data" 

Ancak bu veriler yerde QListWidgetItem görüntülenecek gitmiyor. Varsayılan olarak görüntülenen tek veri, QtCore.Qt.DisplayRole'daki (text() ve setText() kullanımları) veri kümesidir.

Çok sayıda sütun (birden çok veri parçası için) destekleyen ve QTreeWidgetItem özel alt sınıfı oluşturmaya yarayan bir QTreeWidget kullanmanız daha iyi olacaktır. Kullanıcının tablodaki verileri düzenleyebilmesini istiyorsanız, verileri düzenlemek için QLineEdits ve QComboBoxes'u oluşturmak için bir QItemDelegate oluşturmanız gerekir.