使用拖放打开文档

来源:互联网 发布:全球经济增长数据 编辑:程序博客网 时间:2024/05/13 10:10

Qt提供了强大的拖放机制,可以在帮助中通过Drag and Drop 关键字查看 ,拖放操作分为拖动(Drag)和放下(Drop)两种操作,当数据拖动时,会被存储为MIME(Multipurpose Internet Mail Extensions)类型。Qt中使用QMimeData类来表示MIME类型的数据,并使用QDrag类来完成数据的转移,而整个拖放操作都是在几个鼠标事件和拖放事件中完成的。

头文件:

mainwindow.h

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

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.show();    return a.exec();}
mainwindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    setAcceptDrops(true);//接收拖入}MainWindow::~MainWindow(){    delete ui;}void MainWindow::dragEnterEvent(QDragEnterEvent *event){    if(event->mimeData()->hasUrls())    {        event->acceptProposedAction();  //同意提议    }    else    {        event->ignore();//驳回提议    }}void MainWindow::dropEvent(QDropEvent *event){    if(event->mimeData()->hasUrls())    {        QList<QUrl> urlist = event->mimeData()->urls();        QString fileName = urlist.at(0).toLocalFile();        QFile file(fileName);        if(!file.open(QIODevice::ReadOnly))        {            return;        }        QTextStream in(&file);        ui->textEdit->setText(in.readAll());    }}
界面文件:



运行效果:(是主窗口接收拖入,不是Text Edit部件)