Я сделал много поисков (приводит меня к этот а также тот) и добавив несколько строк в мои классы
#include <QtGui/QDragEnterEvent>
#include <QtGui/QDragLeaveEvent>
#include <QtGui/QDragMoveEvent>
#include <QtGui/QDropEvent>
#include <QtCore/QMimeData>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
....
setAcceptDrops(true);
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
event->acceptProposedAction();
}
void MainWindow::dropEvent(QDropEvent *event)
{
qDebug() << "On Drop Event";
const QMimeData* mimeData = event->mimeData();
if (mimeData->hasUrls())
{
QStringList pathList;
QList<QUrl> urlList = mimeData->urls();
for (int i = 0; i < urlList.size() && i < 32; ++i)
{
pathList.append(urlList.at(i).toLocalFile());
}
if(openFiles(pathList))
event->acceptProposedAction();
}
}
void MainWindow::dragMoveEvent(QDragMoveEvent * event)
{
event->acceptProposedAction();
}
void MainWindow::dragLeaveEvent(QDragLeaveEvent* event)
{
event->accept();
}
Но я не могу перетащить файл в свое главное окно (из поиска). Дело не в том, что мой код падает или не компилируется, просто я буквально не может. Нет реакции от MainWindow
, нет подсветки, ничего.
Что мне не хватает?
Я подозреваю, что вы также должны быть перегружены dragMoveEvent: —
void QWidget::dragMoveEvent(QDragMoveEvent * event)
Как утверждают документы: —
Этот обработчик событий вызывается, если выполняется перетаскивание, и когда происходит любое из следующих условий: курсор входит в этот виджет, курсор перемещается внутри этого виджета или клавиша-модификатор нажимается на клавиатуре, когда этот виджет имеет фокус. Событие передается в параметре события.
Есть пример перетаскивания Qt Вот. конкретно этот хорошая ссылка.
Других решений пока нет …