Esempio n. 1
0
bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    if (event->type() == QEvent::DragEnter)
    {
        QDragEnterEvent *dragEvent = (QDragEnterEvent*)event;
        // accept only folders
        QList<QUrl> urls = dragEvent->mimeData()->urls();
        for (const QUrl url: urls)
        {
            if (url.isLocalFile())
            {
                QFileInfo info(url.toLocalFile());

                if (info.isFile())
                {
                    return false;
                }
            }
        }
        dragEvent->setDropAction(Qt::LinkAction);
        dragEvent->acceptProposedAction();

        return true;
    }
    else if (event->type() == QEvent::Drop)
    {
        QList<QUrl> urls = ((QDropEvent*)event)->mimeData()->urls();
        QStringList files;

        for (const QUrl url: urls)
        {
            if (url.isLocalFile())
            {
                QFileInfo info(url.toLocalFile());

                if (info.isFile())
                    files.append(url.toLocalFile());
                else if (info.isDir())
                    filesList->addFolder(info.absoluteFilePath());
            }
        }

        filesList->addFiles(files);

        return true;
    }

    return QMainWindow::eventFilter(object, event);
}