2011-01-04 13 views
9

मैंने दो QListWidget (List1 और List2)क्यूटी खींचें और दोनों के बीच ड्रॉप QListWidget

  • list1list2
  • list1 से आइटम प्राप्त करना एक आंतरिक खींचें के साथ पुनः संगठित हो सकती में सक्षम होना चाहिए सक्षम होना चाहिए और ड्रॉप
  • list2list1

012 से आइटम प्राप्त करने में सक्षम होना चाहिए
list1->setSelectionMode(QAbstractItemView::SingleSelection); 
list1->setDragEnabled(true); 
list1->setDragDropMode(QAbstractItemView::DragDrop); 
list1->viewport()->setAcceptDrops(true); 
list1->setDropIndicatorShown(true); 

ulist2->setSelectionMode(QAbstractItemView::SingleSelection); 
list2->setDragEnabled(true); 
list2->setDragDropMode(QAbstractItemView::InternalMove); 
list2->viewport()->setAcceptDrops(true); 
list2->setDropIndicatorShown(true); 

मैं जब मैं इसे list1 पर खींचें InternalMove पर list2 डाल करने के लिए अन्यथा आइटम नहीं निकाला जा रहा है था।

और यदि मैंने list1InternalMove पर रखा है तो मैं इसे और भी नहीं छोड़ सकता।

क्या मुझे ऐसा करने के लिए अपना खुद का ड्रैग और ड्रॉप फ़ंक्शन लिखना है?

उत्तर

11

आप की तरह नीचे

#ifndef MYLISTWIDGET_HPP 
#define MYLISTWIDGET_HPP 

#include <QListWidget> 

class MyListWidget : public QListWidget { 

public: 
    MyListWidget(QWidget * parent) : 
     QListWidget(parent) {} 

protected: 
    void dragMoveEvent(QDragMoveEvent *e) { 
     if (e->source() != this) { 
      e->accept(); 
     } else { 
      e->ignore(); 
     } 
    } 
}; 

#endif // MYLISTWIDGET_HPP 

हमारे कार्यान्वयन के अंदर हम खींचें घटना के स्रोत की जांच QListWidget अधिभावी dragMoveEvent विधि विस्तार कर सकते हैं और हम स्वीकार नहीं करते (अनुमति देते हैं) आइटम है कि हमारे विजेट खुद से आते हैं छोड़ने।
यदि आप QtDesigner का उपयोग कर रहे हैं तो आप का उपयोग कर सकते हैं जब आप अपने फॉर्म पर QListWidget पर राइट क्लिक करते हैं तो संदर्भ मेनू से विकल्प का उपयोग करें। आपको अपने नए वर्ग का नाम दर्ज करना होगा (MyListWidget मेरे उदाहरण में) और आपको नई हेडर फ़ाइल का नाम दर्ज करना होगा, जहां आपकी कक्षा घोषित की जाएगी (आप उपरोक्त कोड को इस फ़ाइल में कॉपी और पेस्ट कर सकते हैं)।

संबंधित मुद्दे