c++ - Stop QListView from deleting entries on drag-drop -
मैंने एक QStringListModel के साथ एक QListView बनाया है। <पूर्व> listModel = नया QStringListModel (ui- & gt; listView); UI- & gt; listView- & gt; setModel (listModel); UI- & gt; listView- & gt; setEditTriggers (QListView :: NoEditTriggers); UI- & gt; listView- & gt; setDragDropMode (QListView :: InternalMove);
और मैं इनका उपयोग कर आइटम जोड़ता हूं:
शून्य मुख्य विंडू :: addItem (QString परिणाम) {यदि (परिणाम == "") वापसी; listModel- & gt; insertRow (listModel- & gt; ROWCOUNT ()); QModelIndex a = सूचीमोडेल- & gt; सूचकांक (सूचीमोडेल- & gt; पंक्तिकाउंट () - 1); listModel- & gt; setData (एक, परिणाम); } समस्या यह है, जब आप सूची में किसी आइटम को खींचते हैं और इसे दूसरे स्थान पर स्थानांतरित करने का प्रयास करते हैं, तो वह उस आइटम को ओवर-लिखना पसंद करता है जिसे आप इसे खींचते हैं मैं ड्रैग-ड्रॉप एक्शन से कभी भी एक आइटम को हटाना नहीं चाहता।
दस्तावेज़ से हम इस पर ध्यान दें कि इसमें अधिलेखित व्यवहार को नियंत्रित करने के लिए कहां है:
नोट: यह मदों के अधिलेखन को रोकने के लिए नहीं है। फ़्लैग () के मॉडल के कार्यान्वयन को Qt :: ItemIsDropEnabled नहीं लौटने से ऐसा करना चाहिए। < P> यह हमें बताता है कि मॉडल वह है जो इसे नियंत्रित करता है। फिर दस्तावेज़ीकरण को देखते हुए हम देख सकते हैं कि यह डिफ़ॉल्ट रूप से ओवरराइट सक्षम करता है:
QAbstractItemModel :: flags () से पुनःपूर्ति। दिए गए इंडेक्स के साथ आइटम के लिए झंडे लौटाता है मान्य आइटम सक्षम, चयन योग्य, संपादन योग्य, ड्रैग सक्षम और ड्रॉप सक्षम।
इसलिए इस व्यवहार को बदलने के लिए आपको अपने मॉडल को अनुकूलित करना होगा (यानी प्राप्त करना न्यूनतम पर QStringListModel से) और झंडे (const QModelIndex और सूचकांक) const विधि > वापसी नहीं करने के लिए Qt :: ItemIsDropEnabled के व्यवहार को बदलने।
इसे ओवरराइट होने से आपकी प्रविष्टि को रोकना चाहिए।
Comments
Post a Comment