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

Coo*_*der 26 c++ qt drag-and-drop

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

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

bor*_*sbn 42

重载dragEnterEvent()dropEvent()在您的MainWindow类中,并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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意:我也必须重写“MainWindow::dragMoveEvent()”方法,其中我只是“acceptProposedAction()”事件。否则它对我不起作用。 (2认同)
  • 对于那些想要放入容器类型小部件(例如列表视图等)的人,您可以在它们的“viewport()”上执行,而不是在直接小部件本身上执行。 (2认同)

kar*_*lip 6

首先,检查Qt参考文档:拖放基础知识,然后查看QMainWindows上拖放文件的技术内容.后者提供了一个完整的例子.

Qt还有一堆Drag and Drop示例,您可能对Drop Site感兴趣.