2012-01-24 25 views
5

Ben QTableView kullanarak bir PyQT uygulamasında görüntülemek istediğiniz özel veri yapısı var. Verilerle iletişim kurmak için QAbstractTableModel'in bir alt sınıfını kullanıyorum. Veri yapısının kendisi ayrı bir modülde ve PyQt hakkında hiçbir şey bilmiyor.nasıl veri kaynağını sıraladıktan sonra QAbstractTableModel ve QTableView güncellemek için?

gösteriliyor ve QTableView işleri ile veri düzenleme, ama şimdi verileri sıralamak ve daha sonra model ve görünümü güncellemek istiyorum.

QAbstractTableModel ve atası QAbstractItemModel için Qt belgelerine okuduktan sonra benim ilk yaklaşım bu çalışmaktı:

class MyModel(QtCore.QAbstractTableModel): 
    __init__(self, data_structure): 
     super().__init__() 
     self.data_structure = data_structure 

    # ... 

    def sort_function(self): 
     self.layoutAboutToBeChanged.emit() 
     # custom_sort() is built into the data structure 
     self.data_structure.custom_sort() 
     self.layoutChanged.emit() 

Ancak bu görüşü güncellemek için başarısız olur. Ayrıca, model tarafından kullanılan tüm verilerde bir dataChanged sinyali yayınlamayı denedim, ancak bu, görünümü de güncellemedi.

Biraz daha fazla araştırma yaptılar. Eğer doğru anlamak, problem modelinde QPersistentModelIndexes güncellenmeye olmamasıdır ve çözüm elle şekilde onları güncellemek olacaktır.

Bunu yapmanın daha iyi bir yolu var mı? Değilse, bunları güncellemeyi nasıl yaparım (tercihen her indeks değişimini izleyen yeni bir sıralama fonksiyonu yazmak zorunda kalmadan)?

+0

Kodunuz * çalışmalı * ve * kalıcı * indeksler hakkında endişelenmenize gerek yoktur. "Sort_function" ile aynı sinyalleri veren ve görünümleri doğru şekilde güncelleyen modeller yazdım. Fonksiyonunuzun çağrıldığından emin misiniz, 'custom_sort()' aslında verileri değiştirir ve tez değişiklikleri modelinizin 'data()' metoduna yansır mı? –

+0

@FerdinandBeyer Ahh, sorun buydu! Verilerin değiştirildiğini kontrol ettim, ancak veri() yönteminin kendisini kontrol etmeyi düşünmedim. custom_sort(), sıralama yapması gereken bazı öğeleri kopyalıyordu. Çok teşekkür ederim! –

+0

Sorun değil. Çözümünüzü bir cevap olarak göndermekten çekinmeyin ve kabul edin, böylece bu soru cevaplandı olarak işaretlensin! –

cevap

3

custom_sort() işlevi bir hata oluştu. Düzeltdikten sonra, burada anlattığım yaklaşım işe yarıyor.

class MyModel(QtCore.QAbstractTableModel): 
    __init__(self, data_structure): 
     super().__init__() 
     self.data_structure = data_structure 

    # ... 

    def sort_function(self): 
     self.layoutAboutToBeChanged.emit() 
     # custom_sort() is built into the data structure 
     self.data_structure.custom_sort() 
     self.layoutChanged.emit() 
İlgili konular