Qt 实现拖拽文件
时间: 2024-02-24 21:54:08 浏览: 22
在 Qt 中,我们可以使用 `QDrag` 和 `QMimeData` 类来实现拖拽文件的功能。
首先,我们需要在窗口上设置拖拽事件的接受器。在窗口类的构造函数中添加以下代码:
```cpp
setAcceptDrops(true);
```
接着,我们需要实现拖拽事件的处理函数。在窗口类中添加以下代码:
```cpp
void MyWindow::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasUrls())
event->acceptProposedAction();
}
void MyWindow::dropEvent(QDropEvent *event)
{
foreach (const QUrl &url, event->mimeData()->urls()) {
QString fileName = url.toLocalFile();
// 处理文件名
}
}
```
在 `dragEnterEvent` 函数中,我们判断拖拽的数据中是否包含 URL,如果包含,则接受拖拽事件。在 `dropEvent` 函数中,我们获取拖拽的文件名,并进行处理。
最后,我们需要在程序中添加拖拽的起始点。在需要启动拖拽的控件类中添加以下代码:
```cpp
void MyWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
mimeData->setUrls(/* 文件 URL 列表 */);
drag->setMimeData(mimeData);
drag->exec();
}
}
```
在 `mousePressEvent` 函数中,我们创建 `QDrag` 对象,并设置拖拽的数据为文件 URL 列表,然后启动拖拽操作。
注意:在启动拖拽操作后,程序会进入拖拽循环,直到拖拽完成或取消。如果需要在拖拽过程中做一些操作,可以在拖拽循环中添加代码。