热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

拖放(二)

当鼠标拖拽一个数据进入主窗口时,就会触发dragEnterEvent()事件处理函数获取其中MIME数据查看他是否包含URL路径(拖入文本文件实际就是拖入他的路径)即,event-


  • 当鼠标拖拽一个数据进入主窗口时,就会触发dragEnterEvent()事件处理函数
  • 获取其中MIME数据
  • 查看他是否包含URL路径(拖入文本文件实际就是拖入他的路径)
  • 即,event -> mimeData() -> hasUrls()实现
  • 有数据接收,否则忽略该事件
  • 当松开鼠标左键,将数据放入主窗口时就会触发dropEvent()事件来处理函数
  • 获取MIME数据中的URL列表,因为拖入的只有一个文件,所以获取列表中的第一个条目
  • 调用toLocakFile()函数将他转换为本地文件路径
  • 最后用QFile和QTextStream将文件中的数据读入编辑器中

代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include
#include
#include
#include
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
protected:
// 拖动文件进入会触发的事件
void dragEnterEvent(QDragEnterEvent *event);
// 文件放下会触发的事件
void dropEvent(QDropEvent *event);
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
if(event->mimeData()->hasUrls())
event->acceptProposedAction();
else
event->ignore();
}
void MainWindow::dropEvent(QDropEvent *event)
{
const QMimeData *mimeData = event->mimeData();
if(mimeData->hasUrls())
{
QList urlList = mimeData->urls();
QString fileName = urlList.at(0).toLocalFile();
if(!fileName.isEmpty())
{
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly))
return;
QTextStream in(&file);
ui->textEdit->setText(in.readAll());
}
}
}

拖入桌面的一个.txt文件之后的效果!

关键点:QMimeData数据类型、hasUrls函数

 

参考:

不二如是:https://fishc.com.cn/thread-77174-1-1.html



推荐阅读
author-avatar
解忧花
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有