ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

拖放(二)

2021-04-04 10:33:17  阅读:187  来源: 互联网

标签:mimeData void event ui include MainWindow 拖放


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

代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFile>
#include <QTextStream>
#include <QMimeData>
#include <QDragEnterEvent>
#include <QUrl>
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<QUrl> 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

标签:mimeData,void,event,ui,include,MainWindow,拖放
来源: https://blog.csdn.net/qq_42306471/article/details/115366544

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有