Qt Drag & Drop:添加对拖动文件到应用程序主窗口的支持

Posted

技术标签:

【中文标题】Qt Drag & Drop:添加对拖动文件到应用程序主窗口的支持【英文标题】:Qt Drag & Drop: Add support for dragging files to the application's main window 【发布时间】:2013-01-31 11:07:28 【问题描述】:

许多应用程序允许用户将一个或多个文件拖到应用程序的主窗口。

如何在我自己的 Qt 应用程序中添加对此功能的支持?

【问题讨论】:

【参考方案1】:

MainWindow 类中重载dragEnterEvent()dropEvent(),并在构造函数中调用setAcceptDrops()

MainWindow::MainWindow(QWidget *parent)

    ..........
    setAcceptDrops(true);


void MainWindow::dragEnterEvent(QDragEnterEvent *e)

    if (e->mimeData()->hasUrls()) 
        e->acceptProposedAction();
    


void MainWindow::dropEvent(QDropEvent *e)

    foreach (const QUrl &url, e->mimeData()->urls()) 
        QString fileName = url.toLocalFile();
        qDebug() << "Dropped file:" << fileName;
    

【讨论】:

不客气。我没有写代码,而是从我的源代码复制粘贴))) 请注意:我也必须重写 MainWindow::dragMoveEvent() 方法,在该方法中我只是 acceptProposedAction()'d 事件。否则它对我不起作用。 对于那些想要放入容器类型小部件(如列表视图等)的用户,您可以在他们的viewport() 上执行,而不是直接小部件本身。【参考方案2】:

首先,查看Qt Reference Documentation: Drag and Drop 了解基础知识,然后查看Drag and Drop of files on QMainWindows 了解技术内容。后者提供了一个完整的例子。

Qt还有一堆Drag and Drop examples,你可能对Drop Site感兴趣。

【讨论】:

感谢您的帮助!一定会调查的。

以上是关于Qt Drag & Drop:添加对拖动文件到应用程序主窗口的支持的主要内容,如果未能解决你的问题,请参考以下文章

重点突破——Drag&Drop拖动与释放

C# Drag&Drop,由于内容而很难选择可拖动面板

HTML5 Drag & Drop 在拖动时更改光标(不要使用 UI)

HTML5拖拽/拖放(drag & drop)详解

jQuery Drag&Drop:拖动一个封闭元素

Qt学习笔记13.拖放技术:Drag & Drop