2012-10-04 17 views
5

मैं क्यूटी में एक क्रमबद्ध सूची बना रहा हूं। कोड डाउनवर्ड स्क्रॉल के लिए पूरी तरह से अच्छी तरह से काम करता है लेकिन जब मुझे सूची नीचे स्क्रॉल करने के बाद ड्रैग करने योग्य आइटम प्राप्त करने में कुछ समस्याएं होती हैं। मैं बेहतर समझ के लिए कुछ परीक्षण का मामला स्क्रीनशॉट जोड़ लिया हैसूची नीचे स्क्रॉल करने के बाद QListWidget खींचें

Screen1 http://imageshack.us/a/img13/2791/56842367.png Screen2 http://imageshack.us/a/img819/8662/87542336.png Screen3 http://imageshack.us/a/img24/761/97993758.png Screen4 http://imageshack.us/a/img825/1172/93877106.png

खैर इस परीक्षण का मामला कोड

#include <QtGui> 

    int main(int argc, char **argv) 
    { 
     QApplication app(argc, argv); 
     QListWidget *listWidget = new QListWidget; 
     for(int i=0;i<100;++i){ 
     listWidget->addItem("SongOne"); 
     listWidget->addItem("SongTwo"); 
     listWidget->addItem("SongThree"); 
     listWidget->addItem("SongFour"); 
     listWidget->addItem("SongFive"); 
     } 
     listWidget->setDragDropMode(QAbstractItemView::InternalMove); 
     listWidget->setDragEnabled(true); 
     listWidget->setAcceptDrops(true); 
     listWidget->setDropIndicatorShown(true); 
     listWidget->viewport()->setAcceptDrops(true); 
     listWidget->setSelectionMode(QAbstractItemView::SingleSelection); 
     listWidget->show(); 
     app.exec(); 
     delete listWidget; 
     return 0; 
    } 

thankz मेरी पोस्ट को पढ़ने में समय लेने के लिए है। अगर मेरी कोई याद आती है कि मुझे क्या याद आ रहा है, तो मुझे मदद करें। मुझे लगता है कि मुझे कुछ संपत्ति स्थापित करने में याद आ रही है। मुख्य कार्यक्रम (परीक्षण कोड नहीं) में, मैंने dragMoveEvent और कुछ और विधि को फिर से लिखने का प्रयास किया, लेकिन कोई उपयोग नहीं किया।

यहां समस्या ड्रैग और ड्रॉप नहीं है, लेकिन ड्रैग और ड्रॉप करते समय QRect बनाया गया है। चित्रा दो में Qrect बनाया गया है, लेकिन लाइनों को हटाने के लिए चित्रा चार में

उत्तर

1

नहीं की कोशिश करें:

listWidget->setDragEnabled(true); 
listWidget->setAcceptDrops(true); 
listWidget->setDropIndicatorShown(true); 
listWidget->viewport()->setAcceptDrops(true); 

वे 'असली' Drag'n'Drop प्रणाली साथ दखलंदाजी कर सकते हैं। रीडरिंग आमतौर पर एक अनुकूलित तरीके से संभाला जाता है।

एक और समाधान यह हो सकता है कि आप QListWidget को उपclass और ड्रैग इवेंट में तत्व की अनुक्रमणिका प्राप्त करें और ड्रॉप ईवेंट में अन्य तत्व की अनुक्रमणिका प्राप्त करें। तो आप जानते हैं कि पुन: व्यवस्थित करना और कहां रखा जाना चाहिए (दूसरे तत्व की अनुक्रमणिका से पहले या उसके बाद)। बाकी आसान होना चाहिए, बस Item() और insertItem() ले लो।

आशा मैं इन दो तरीकों के साथ मदद की;)

+0

खेद अलेक्जेंडर समस्या यहां खींचें और ड्रॉप लेकिन QRect कि बनाई गई है नहीं है ड्रैग और ड्रॉप करते समय – sobingt

1

Win7 में, मैं एक ही व्यवहार पुन: पेश करने में सक्षम नहीं था। यह सिर्फ काम करता है (यहां तक ​​कि आकार संकेत अपने स्क्रीन शॉट की आवश्यकता को पूरा करने के लिए बदलाव किया गया है। :)) मेरे परीक्षण कोड था ...

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 
    QListWidget *listWidget = new QListWidget; 
    const char* titles[] = { 
     "SongOne%1", 
     "SongTwo%1", 
     "SongThree%1", 
     "SongFour%1", 
     "SongFive%1", 
    }; 
    for(int i=0;i<100;++i){ 
     QString title = QString(titles[i%5]).arg(i); 
     QListWidgetItem* item = new QListWidgetItem(title); 
     item->setData(Qt::SizeHintRole, QSize(50,100)); 
     listWidget->addItem(item); 
    } 
    listWidget->setDragDropMode(QAbstractItemView::InternalMove); 
    listWidget->setDragEnabled(true); 
    listWidget->setAcceptDrops(true); 
    listWidget->setDropIndicatorShown(true); 
    listWidget->viewport()->setAcceptDrops(true); 
    listWidget->setSelectionMode(QAbstractItemView::SingleSelection); 
    listWidget->show(); 
    app.exec(); 
    delete listWidget; 
    return 0; 
} 
संबंधित मुद्दे