2014-10-12 12 views
6

के साथ मौजूदा (पंक्ति, कॉलम) सी ++ मॉडल का उपयोग करना मेरे पास कुछ मॉडल हैं जो QAbstractItemModel नियमों को पुनर्प्राप्त करने और तालिका के लिए डेटा प्रदान करने के नियमों का उपयोग करते हैं।QtQuick (ग्रिड, टेबल व्यू)

मेरे उदाहरण मॉडल में कई कॉलम और पंक्तियां हैं। दुर्भाग्य से QtQuick विजेट केवल एक कॉलम को संभाल सकता है। भूमिकाओं के माध्यम से QtQuick विजेट में अन्य "कॉलम" जोड़े जाते हैं। तो दृश्य में एकाधिक कॉलम मॉडल में एक ही कॉलम से मेल खाते हैं। अन्य मॉडल कॉलम, अनदेखी कर रहे हैं के रूप में this question and its answer में विस्तार से बताया

मैं सोच रहा था कि यह भी मुश्किल एक अमूर्त प्रदान करने के लिए नहीं होना चाहिए QML सी ++ पक्ष पर इस्तेमाल किया जा करने के लिए (एक QAbstractProxyModel के रूप में) जो जब पंक्ति एन के लिए कहा, modulos यह स्रोत मॉडल की कॉलम गिनती से और परिणामस्वरूप वास्तविक कॉलम से डेटा पुनर्प्राप्त करता है। यह Grid के लिए काम करेगा, लेकिन TableView के लिए काम नहीं करेगा क्योंकि यह TableViewColumn पर निर्भर करता है और केवल निरंतर पंक्ति सूचकांक का उपयोग करने के बजाय भूमिका नामों पर निर्भर करता है। इसके लिए, प्रॉक्सी मॉडल को उस स्रोत द्वारा अंतर करने की आवश्यकता होगी जो स्रोत मॉडल के कॉलम से पुनर्प्राप्त करने के लिए है।

http://qt-project.org/forums/viewthread/41793 के उत्तर में मौजूद स्निपेट QSqlTableModel को अपनाने के लिए करता है, लेकिन अभी भी उपयोग करने के लिए बहुत से संकेतों का अनुवाद करना याद करता है। जैसा कि मैंने कल्पना की है कि यदि SQL स्रोत मॉडल columnsInserted उत्सर्जित करेगा, तो उसे उस कॉलम के लिए चुनी गई नई भूमिकाओं और उपलब्ध भूमिका नामों में परिवर्तन के साथ dataChanged सिग्नल में अनुवाद करना चाहिए। QMLifyProxyModel बेहतर प्रतीत होता है, लेकिन उत्पादन 4 साल से तैयार और मृत नहीं है, ऐसा लगता है।

आधिकारिक सिफारिश के अनुसार, हम दोनों कैसे अच्छी तरह से इसे ठीक कर सकते हैं ताकि दोनों दुनिया एक साथ काम कर सकें? QtQuick विचार (पंक्ति, कॉलम) नोटेशन का उपयोग क्यों नहीं करते हैं कि QAbstractItemModel और QTableView पहले से ही उपयोग कर रहा है?

उत्तर

1

कठिनाई का एक हिस्सा यह है कि QtQuick उपयोग मॉडल QWidget विचारों की तुलना में कठोर है, इसलिए यह अन्य तरीकों को हासिल करने की कोशिश करने लायक हो सकता है; मॉडलों को भूमिकाओं का उपयोग करने के लिए परिवर्तित करना और कॉलम इंडेक्स + हेडर को भूमिकाओं को मैप करने के लिए प्रॉक्सी मॉडल का उपयोग करना, उसी तरह डेटाटाव कॉलम करता है, लेकिन QWidget विचारों के लिए। कॉलम सम्मिलन और निष्कासन संकेतों को संभालना आसान होना चाहिए यदि स्रोत कॉलम की बदलती संख्या के बजाय भूमिकाओं की स्थिर संख्या है।

अफसोस की बात यह अंतर्निहित या अधिक जटिल मॉडल के लिए मदद नहीं करेगा।

अधिकांश QtQuick विचार 1 डी मॉडल के लिए डिज़ाइन किए गए हैं जब फ़ोन इसके डिज़ाइन लक्ष्य थे। भूमिकाओं का इस्तेमाल एक पंक्ति/वस्तु के अनियमित गुणों को उनके लिखित नाम पर मैप करने के लिए किया जाता था।

टेबलव्यू कुछ साल बाद आया और ऐसा लगता है कि 2 डी मॉडल का उपयोग करने के लिए अतिरिक्त मील किया जाना चाहिए था, लेकिन शायद यह उस समय कुछ अतिरिक्त काम रहा होगा जहां QtQuick पहले से ही एक जानवर था, खासकर जब से टेबलव्यू को ज्यादातर क्यूएमएल में लिखा गया था।