2011-09-12 18 views
5

मुझे अपने क्यूटी/साक्षात्कार आवेदन में कोई समस्या है। मैं पेड़ डेटा प्रदर्शित करने के लिए QTreeView का उपयोग करता हूं। मैंने QAbstractItemModel के आधार पर अपना खुद का मॉडल लागू किया।क्यूटी त्रुटि "लगातार मॉडल इंडेक्स दूषित" क्यों?

मुझे एप्लिकेशन क्रैश से पहले एक त्रुटि मिली है। यह नया रिकॉर्ड जोड़ने के बाद अक्सर होता है।

क्या आप मुझे समझा सकते हैं कि इस त्रुटि का अर्थ क्या है। QPersistentModelIndex क्या है? मैं अपने कोड में QPersistentModelIndex का उपयोग नहीं कर रहा हूं।

ASSERT failure in QPersistentModelIndex::~QPersistentModelIndex: "persistent model indexes corrupted" 

धन्यवाद।

+0

क्या आपने लेआउट का उपयोग किया थाआउटआउट और लेआउट चेंज किए गए सिग्नल आपके मॉडल में? –

उत्तर

5

QPersistentModelIndexes उन वस्तुओं के लिए (पंक्ति, कॉलम, अभिभावक) संदर्भ हैं जो नियमित रूप से अपडेट किए जाते हैं जब संदर्भित आइटम मॉडल के अंदर स्थानांतरित होते हैं, नियमित QModelIndex के विपरीत।
उदाहरण के लिए, यदि आप एक पंक्ति डालते हैं, तो सम्मिलन बिंदु के नीचे स्थित सभी मौजूदा लगातार इंडेक्स में row संपत्ति एक से बढ़ी जाएगी।

आप उन्हें सीधे उपयोग नहीं कर सकते हैं, लेकिन QTreeView विस्तारित वस्तुओं और चयनित वस्तुओं का ट्रैक रखने के लिए, उदाहरण के लिए करता है।

और इन लगातार इंडेक्स को अद्यतन करने के लिए, आपको नए रिकॉर्ड जोड़ने पर वास्तविक पंक्ति सम्मिलन (ओं) के आसपास QAbstractitemModel::beginInsertRows() और endInsertRows() फ़ंक्शन को कॉल करना होगा।

जानकारी के लिए उपवर्गीकरण मॉडल कक्षाओं के बारे में अनुभाग के अंत देखें: http://doc.trolltech.com/latest/qabstractitemmodel.html#subclassing

मैं इस विधि QAbstractItemModel::persistentIndexList मिल गया और मैं सोच रहा क्या अनुक्रमित इसे वापस चाहिए हूँ। उन सभी को ?
क्या यह विधि वर्तमान में TreeView में दिखाई देने वाले सभी नोड्स को वापस कर देनी चाहिए?

विधि केवल अनुक्रमित जिसके लिए एक QPersistentIndexModel बनाया गया था वापस आती है और दायरे में अब भी है (एक स्थानीय चर, एक वर्ग के सदस्य के रूप में या उदाहरण के लिए एक QList<QPersistentIndexModel> में) यही कारण है कि।

विस्तारित या चयनित नोड्स वर्तमान में वर्तमान में दिखाई नहीं दे रहे हैं, इसलिए आप इन लगातार इंडेक्स का उपयोग करने के बारे में कुछ भी नहीं मान सकते हैं (और वैसे भी नहीं)।

तुम बस उन्हें अपडेट रखने के लिए है, और आप केवल मॉडल में बड़े परिवर्तन के लिए persistentIndexList उपयोग करने के लिए, छंटाई (देखें QTreeWidget आंतरिक मॉडल: QTreeModel::ensureSorted(link)) की तरह की जरूरत है, छोटे वृद्धिशील परिवर्तन के लिए आप सभी beginXxxRows/beginXxxColumns and endXxxRows/endXxxColumns methods है।

+0

उत्तर के लिए धन्यवाद :) मुझे यह विधि मिली QAbstractItemModel :: persistentIndexList और मैं सोच रहा हूं कि इसे किस इंडेक्स को वापस करना चाहिए। उन सभी को ?? –

+0

मेरा मतलब है कि यह विधि ट्री व्यू में वर्तमान में दिखाई देने वाले सभी नोड्स को वापस कर देनी चाहिए। या क्या कोई अन्य नियम है? –

+1

@ डेविड मैंने आपके सवालों के जवाब देने के लिए मेरा जवाब पूरा कर लिया। – alexisdm