Qt-打开拖动的文件

x.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtWidgets>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
protected:
    void dragEnterEvent(QDragEnterEvent *event);
    void dropEvent(QDropEvent *event);

private:
    bool readFile(const QString &filename);
    QTextEdit *textEdit;
    Ui::Widget *ui;
};
#endif // WIDGET_H

x.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QtWidgets>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->textEdit->setAcceptDrops(false);
    //关闭textEdit的拖放事件

    setAcceptDrops(true);
    //开启widget的拖放事件截取

    setWindowTitle("窗口拖放事件");
}
void Widget::dragEnterEvent(QDragEnterEvent *event)
{
    //将文件拖动到组件时,系统会回调该函数
    if(event->mimeData()->hasFormat("text/uri-list")){
    //此处是过滤文件类型,只有MIME类型为text/uri-list的才可接收

        event->acceptProposedAction();
        //该函数可以使组件接受文件拖放
    }

}
void Widget::dropEvent(QDropEvent *event)
{
    //当松开鼠标时,系统回调该函数
    QList<QUrl > urls = event->mimeData()->urls();
    if(urls.isEmpty()){
        return ;
    }

    QString filename = urls.first().toLocalFile();
    if(filename.isEmpty()){
        return ;
    }
    if(readFile(filename)){
        setWindowTitle(tr("%1 - %2").arg(filename, tr("Drag File")));
    }

}
bool Widget::readFile(const QString &filename)
{
    QFile file(filename);
    QString strFile;
    if(file.open(QIODevice::ReadOnly)){

        strFile = QString::fromLocal8Bit(file.readAll());
        //避免中文乱码,转换编码


        ui->textEdit->setHtml(strFile);
        //将strFile的内容以Html语句写入
        //ui.textEdit->setText(strFile);

        return true;
    }
    return false;
}
Widget::~Widget()
{
    delete ui;
}


在这里插入图片描述

posted @ 2020-10-11 17:11  code_witness  阅读(92)  评论(0)    收藏  举报