拖放打开文件
- 窗口界面的setAcceptDrops属性不许设置为true,否则无法接收拖放事件;
- QTextEdit的setAcceptDrops属性必须设置为false,否则进行拖放时会进入QTextedit的拖放事件进行响应;
- 如果调试时,无法进入重写的拖放事件,请检查setAcceptDrops的属性设置。
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTextEdit>
#include <QLayout>
#include <QDragEnterEvent>
#include <QMimeData>
#include <QUrl>
#include <QTextStream>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
virtual void dragEnterEvent(QDragEnterEvent *event);
virtual void dropEvent(QDropEvent *event);
private:
QTextEdit *m_pTextEdit;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
m_pTextEdit = new QTextEdit;
this->layout()->addWidget(m_pTextEdit);
this->resize(500, 400);
this->setAcceptDrops(true); //必须设置,不然无法接收拖放事件
m_pTextEdit->setAcceptDrops(false); //必须设置,不然窗口的拖放事件无法响应,而是去响应QTextEdit的拖放事件
}
MainWindow::~MainWindow()
{
delete m_pTextEdit;
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
if(event->mimeData()->hasUrls())
{
event->acceptProposedAction();
}
else
{
event->ignore();
}
}
void MainWindow::dropEvent(QDropEvent *event)
{
const QMimeData *mimeData = event->mimeData();
if(mimeData->hasUrls())
{
QList<QUrl> urls = mimeData->urls();
QString fileName = urls.at(0).toLocalFile();
QFile file(fileName);
if(file.open(QIODevice::ReadOnly))
{
//读取中文和字符会出错
// QByteArray text = file.readAll();
// m_pTextEdit->setText(QString::fromUtf8(text));
QTextStream stream(&file);
m_pTextEdit->setText(stream.readAll());
}
}
}
版权声明:本文为qq_39987383原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。