第一步:在构造函数里面 添加拖放支持,相当于总开关(注意这里设置之后是整个窗口可以接受拖放)
setAcceptDrops(true);
第二步:重写接受拖放相关的虚函数
void dragEnterEvent(QDragEnterEvent* event); void dragMoveEvent(QDragMoveEvent* event); void dragLeaveEvent(QDragLeaveEvent* event); void dropEvent(QDropEvent* event);
第三步:实现以上虚函数,并在 dragEnterEvent 函数里面 过滤拖进来的内容
// 有东西被拖进来(拖着,未松开鼠标) void QtTest::dragEnterEvent(QDragEnterEvent* event) { // 拖进来的东西属于哪种内容保存在formats里面 QStringList formats = event->mimeData()->formats(); for (int i = 0; i < formats.size(); i++) { qDebug() << "formats : " << formats.at(i); } // 如果是文本才接受拖放 if (event->mimeData()->hasText()) { event->acceptProposedAction(); } } // 东西拖进来移动 void QtTest::dragMoveEvent(QDragMoveEvent* event) { qDebug() << "dragMoveEvent!" << endl; } // 东西拖进来没有放下离开了 void QtTest::dragLeaveEvent(QDragLeaveEvent* event) { qDebug() << "dragLeaveEvent!" << endl; } // 有东西被放下(松开鼠标) void QtTest::dropEvent(QDropEvent* event) { // 判断进来的内容如果是文本,就直接设置label控件的内容 if (event->mimeData()->hasText()) { ui.label->setText(event->mimeData()->text()); } }