qt 鼠标拖动文件,将文件名显示在控件上的事件代码示例
时间: 2024-09-24 17:25:45 浏览: 41
在Qt中,当你需要在鼠标拖动文件时动态显示文件名,可以使用`QDropEvent`,特别是如果你在一个支持拖放功能的控件上,比如`QLineEdit`。下面是一个简单的例子,展示如何在`QLineEdit`中捕获拖入的文件名:
```cpp
#include <QApplication>
#include <QLineEdit>
#include <QMimeData>
#include <QStringList>
#include <QFile>
class DragDropLineEdit : public QLineEdit {
public:
DragDropLineEdit(QWidget *parent = nullptr)
: QLineEdit(parent) {}
protected:
void dragEnterEvent(QDragEnterEvent *event) override {
if (event->mimeData()->hasUrls()) {
event->acceptProposedAction();
} else {
event->ignore();
}
}
void dropEvent(QDropEvent *event) override {
QStringList urls = event->mimeData()->urls().map([this](const QUrl &url) { return url.toLocalFile(); });
if (!urls.isEmpty()) {
QString fileName = urls.first();
setReadOnly(true); // 设置只读状态,防止覆盖已有的文本
setText(fileName); // 显示文件名
}
event->acceptProposedAction();
}
private:
void mouseMoveEvent(QMouseEvent *) override {}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
DragDropLineEdit lineEdit;
lineEdit.setAcceptDrops(true); // 开启接受拖放
lineEdit.show();
return app.exec();
}
```
在这个例子中,我们创建了一个`DragDropLineEdit`,它会在`dragEnterEvent`中检查是否有URLs,如果有并且URL指向本地文件,则在`dropEvent`中获取文件名并显示在编辑框中。当文件拖放到编辑框时,文件名会被高亮显示,并且鼠标无法再次输入文字。
阅读全文