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;
}


浙公网安备 33010602011771号