2012-01-24 19 views
5

मेरे पास एक कस्टम डेटा संरचना है जिसे मैं एक QTableView का उपयोग कर एक पीईक्यूटी अनुप्रयोग में प्रदर्शित करना चाहता हूं। मैं डेटा के साथ संवाद करने के लिए QAbstractTableModel के उप-वर्ग का उपयोग कर रहा हूं। डेटा संरचना स्वयं एक अलग मॉड्यूल में है और पीईक्यूटी के बारे में कुछ भी नहीं जानता है।डेटा स्रोत को सॉर्ट करने के बाद QAbstractTableModel और QTableView को कैसे अपडेट करें?

QTableView कार्यों के साथ डेटा प्रदर्शित और संपादित करना, लेकिन अब मैं डेटा को सॉर्ट करना चाहता हूं और फिर मॉडल को अपडेट करना और देखना चाहता हूं।

QAbstractTableModel और अपने पूर्वज QAbstractItemModel के लिए क्यूटी प्रलेखन पढ़ने के बाद, मेरा पहला दृष्टिकोण यह कोशिश करने के लिए किया गया था:

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() 

हालांकि, इस दृश्य को अपडेट करने में विफल रहता। मैंने मॉडल द्वारा उपयोग किए जा रहे सभी डेटा पर एक डेटा चेंज सिग्नल उत्सर्जित करने का भी प्रयास किया, लेकिन यह दृश्य को अपडेट करने में भी असफल रहा।

मैंने कुछ और शोध किया। अगर मैं सही ढंग से समझता हूं, तो समस्या यह है कि मॉडल में QPersistentModelIndexes अद्यतन नहीं हो रहे हैं, और समाधान किसी भी तरह मैन्युअल रूप से उन्हें अपडेट करना होगा।

क्या ऐसा करने का कोई बेहतर तरीका है? यदि नहीं, तो मैं उन्हें अपडेट करने के बारे में कैसे जाउंगा (अधिमानतः एक नया सॉर्ट फ़ंक्शन लिखने के बिना जो प्रत्येक इंडेक्स परिवर्तन को ट्रैक करता है)?

+0

आपका कोड * * काम * करना चाहिए और आपको * लगातार इंडेक्स के बारे में चिंता करने की आवश्यकता नहीं है। मैंने ऐसे मॉडल लिखे हैं जो आपके 'sort_function' के समान सिग्नल उत्सर्जित करते हैं और दृश्यों को सही तरीके से अपडेट करते हैं। क्या आप सुनिश्चित हैं कि आपका फ़ंक्शन कॉल हो जाता है, 'custom_sort()' वास्तव में डेटा बदलता है और थेसिस परिवर्तन आपके मॉडल के 'डेटा()' विधि द्वारा प्रतिबिंबित होते हैं? –

+0

@ फ़र्डिनेंडबेयर आह, वह समस्या थी! मैंने पहले से ही जांच की थी कि डेटा बदल रहा था, लेकिन डेटा() विधि को स्वयं जांचने के लिए नहीं सोचा था। custom_sort() कुछ वस्तुओं की प्रतिलिपि बना रहा था जहां इसे जगह में सॉर्ट करने की आवश्यकता थी। आपका बहुत बहुत धन्यवाद! –

+0

कोई समस्या नहीं है। अपने समाधान को उत्तर के रूप में पोस्ट करने के लिए स्वतंत्र महसूस करें, और इसे स्वीकार करें, ताकि इस प्रश्न को उत्तर के रूप में चिह्नित किया जा सके! –

उत्तर

3

custom_sort() फ़ंक्शन में एक बग था। इसे ठीक करने के बाद, यहां वर्णित दृष्टिकोण काम करता है।

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() 
संबंधित मुद्दे