मैंने QAbstractItemModel subclassing द्वारा आलसी आबादी वाले वृक्षदृश्य को लागू किया है।QSortFilterProxyModel और आलसी आबादी वाले पेड़दृश्य
https://gist.github.com/gnufied/db9c4d805e2bb24d8c23
(मैं संदेश सेवा से गंदगी के रूप में कोड इनलाइन चिपकाने नहीं कर रहा हूँ, इसलिए)
यह मूल रूप से तालिका में संग्रहीत श्रेणीबद्ध डेटा का एक पेड़ प्रतिनिधित्व है: कार्यान्वयन की तरह कुछ लग रहा है। अब, मैं चाहता हूं कि उपयोगकर्ता स्तंभों के आधार पर पंक्तियों को सॉर्ट करने में सक्षम हों। कॉलम कहां हैं, "गिनती" या "संदर्भ गणना"। ये मान मूल रूप से पूर्णांक हैं।
अपने स्वयं के कार्यों पर कार्यान्वयन, जब तक कि मैं QSortFilterProxyModel में फेंक नहीं देता और मुझे दृश्य में बहुत सारी खाली पंक्तियां मिलती हैं। मुश्किल समस्या यह है कि यह तब होता है जब मेरे पास बहुत सारी पंक्तियां होती हैं (जैसे हजारों या तो)।
छँटाई प्रॉक्सी लागू करने के लिए कोड है:
rootItem = RBKit::SqlConnectionPool::getInstance()->rootOfSnapshot(snapShotVersion);
model = new RBKit::HeapDataModel(rootItem, this);
proxyModel = new SortObjectProxyModel(this);
proxyModel->setSourceModel(model);
ui->treeView->setModel(proxyModel);
ui->treeView->setSortingEnabled(true);
मैं QSortFilterProxyModel वर्ग और उपवर्ग कार्यान्वयन subclassed है वास्तव में सरल है:
https://gist.github.com/gnufied/115f1a4fae3538534511
प्रलेखन कहता है -
" इस जटिल प्रॉक्सिंग तंत्र को अधिक जटिल व्यवहार के साथ स्रोत मॉडल के लिए ओवरराइड करने की आवश्यकता हो सकती है; एफ या उदाहरण, यदि स्रोत मॉडल कस्टम है IChildren() कार्यान्वयन प्रदान करता है, तो आपको प्रॉक्सी मॉडल में भी एक प्रदान करना चाहिए। "
लेकिन उससे परे, मुझे यकीन नहीं है - मुझे क्या याद आ रहा है।
क्या आप अपरिवर्तित सामग्री देखते हैं यदि आप अपने मॉडल को पेड़ पर सेट करते हैं तो सीधे प्रॉक्सी मॉडल के बिना देखें? –
हाँ, बिना 'proxyModel' के बीच मैं बिना किसी समस्या के निरर्थक सामग्री को ठीक से देखता हूं! –
बीटीडब्ल्यू - मैंने शीर्ष और निचली पंक्ति अनुक्रमणिका के साथ 'endInsertRows' के अंत में 'डेटा चेंज' ईवेंट उत्सर्जित करने का प्रयास किया है। इससे समस्या ठीक नहीं होती है। इसके बाद मैंने कोशिश की - 'layoutChanged' ईवेंट उत्सर्जित करता है जो समस्या को हल करता है लेकिन यह एप्लिकेशन को यादृच्छिक रूप से क्रैश करता है। –