كيفية تنفيذ السحب في QListWidget التي تحتوي على ملفات؟

StackOverflow https://stackoverflow.com/questions/4295838

  •  28-09-2019
  •  | 
  •  

سؤال

لديّ QListWidget أملأه بأسماء الملفات (اسم الملف بدون مسار هو نص العنصر ، والمسار الكامل في تلميح أدوات العنصر). أريد أن أكون قادرًا على السحب ، على سبيل المثال ، ملف فيلم إلى VLC من QListWidget الخاص بي ، ويجب أن تبدأ VLC في تشغيلها - كما لو كنت قد قمت بسحبه من مدير ملفات.

لقد حاولت قراءة الوثائق على Drag & Drop ، لكن لم أستطع معرفة كيفية القيام بذلك. لقد قمت بتعيين خاصية الانتقاد على خاصية DragDropMode إلى Dragonly. الآن يمكنني بدء السحب ، ولكن إذا قمت بسحب عنصر قائمة إلى VLC لا يحدث شيء (وهو أمر غير مفاجئ).

هل كانت مفيدة؟

المحلول

أردت أن أفعل نفس الشيء بالضبط ، إليك ما توصلت إليه. إنه يعمل على Windows ، لكنني لم أختبر على منصات أخرى.

class CustomListWidget : public QListWidget
{
    public :
        CustomListWidget( QWidget * parent = 0 ) : QListWidget( parent ) {}
    protected :
        QStringList mimeTypes() const
        {
            QStringList qstrList;
            qstrList.append("text/uri-list");
            return qstrList;
        }
        QMimeData * mimeData( const QList<QListWidgetItem *> items ) const
        {
            QMimeData *data = new QMimeData();
            QList< QUrl > urls;
            QUrl url;
            url.setPath( items[ 0 ]->toolTip() );
            urls.append( url );
            data->setUrls( urls );
            return data;
        }
};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top