Qt文本拖放

来源:互联网 发布:淘客怎么登陆淘宝客 编辑:程序博客网 时间:2024/06/13 06:23

//下面是mainwindow.h文件

#ifndef MAINWINDOW_H

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

//下面是mainwindow.cpp文件

 
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QUrl>
#include <QTextStream>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setAcceptDrops(true);//设置接受放下事件
}
MainWindow::~MainWindow()
{
    delete ui;
}
//拖放进入事件
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    //判断数据中是否包含URL
    if(event->mimeData()->hasUrls())
    {
        //如果是则处理该动作
        event->acceptProposedAction();
    }
    else
    {
        //不是忽略该事件
        event->ignore();
    }
}
//放下事件
void MainWindow::dropEvent(QDropEvent *event)
{
    //获取MIME数据
    const QMimeData *mimeData = event->mimeData();
    if(mimeData->hasUrls())
    {
        //获取数据中包括的URL
        QList<QUrl> urlList = mimeData->urls();
        //将其中第一个URL表示为本地文件路径
        QString fileName = urlList.at(0).toLocalFile();
        //如果文件路径不为空,则打开
        if(!fileName.isEmpty())
        {
            //将当前MainWindowTitle设置为打开的文件
            this->setWindowTitle(fileName);
            //建立QFile对象并且以只读方式打开该文件
            QFile file(fileName);
            if(file.open(QIODevice::ReadOnly))
            {
                //建立文本流对象
                QTextStream in(&file);
                //将文件中所有内容读入到编辑框
                ui->textEdit->setText(in.readAll());
            }
        }
    }
}

 

 

/*

当鼠标拖拽一个数据进入主窗口时,就会触发dragEventEvent()事件处理函数,获取其中的Mime数据,然后查看它是否包含URL

路径,因为拖入的文本文件实际上就是拖入它的路径.

当松开鼠标时,将数据放入主窗口时就会触发dropEvent()事件处理函数

*/

0 0
原创粉丝点击