Qt富文本 - 文件拖拽和打开

文件拖拽和打开

  • 新建桌面应用程序testDragFile,基类QMainWindow,勾选创建界面文件
  • 界面中添加textEdit部件,点击主窗口,Ctrl + G使textEdit为中心部件
  • Mainwindow.h添加拖拽事件声明

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include 
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 
#include 
#include 
#include 
#include 

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){
    ui->setupUi(this);
    setAcceptDrops(true);				 //当前对象接收拖拽事件	
    ui->textEdit->setAcceptDrops(false); //不接收拖拽事件,否则会进入子控件的拖拽事件
}

MainWindow::~MainWindow(){
    delete ui;
}

void MainWindow::dragEnterEvent(QDragEnterEvent *event){
    if(event->mimeData()->hasUrls()){
        event->acceptProposedAction();
    }else{
        event->ignore();
    }
}

void MainWindow::dropEvent(QDropEvent *event){
    //拖拽时数据类型为Mime
    const QMimeData *mimeData = event->mimeData();
    if(mimeData->hasUrls()){
       QList<QUrl> urlList = mimeData->urls();
       //列表中第一个条目转换为本地文件类型
       QString fileName = urlList.at(0).toLocalFile();
       if(!fileName.isEmpty()){
           if(fileName.right(4) == ".png" ||
                   fileName.right(4) == ".jpg" ||
                   fileName.right(4) == ".ico"){
               QTextImageFormat format;
               format.setName(fileName);
               ui->textEdit->textCursor().insertImage(format);
               return;
           }
           QFile file(fileName);
           if(!file.open(QIODevice::ReadOnly)) return;

           QTextStream stream(&file);
           stream.setCodec("UTF-8");
           ui->textEdit->setText(stream.readAll());
           file.close();
       }
    }
}

运行效果
Qt富文本 - 文件拖拽和打开_第1张图片
Qt富文本 - 文件拖拽和打开_第2张图片

你可能感兴趣的:(Qt,qt)