文章目录
主要思路:
- 重写 void dragEnterEvent(QDragEnterEvent *e); void dropEvent(QDropEvent *e);
- 根据获取的文件名,打开文件,读文件。
源代码:
main.cpp
#include
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void dragEnterEvent(QDragEnterEvent *e);
void dropEvent(QDropEvent *e);
private:
bool readFile(const QString &fileName);
QTextEdit *textEdit;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
textEdit = new QTextEdit;
setCentralWidget(textEdit);
textEdit->setAcceptDrops(false); //禁用textEdit控件的放下操作
setAcceptDrops(true);//启用textEdit控件的放下操作
setWindowTitle(tr("Text Editor"));
}
MainWindow::~MainWindow()
{
}
void MainWindow::dragEnterEvent(QDragEnterEvent *e)
{
if(e->mimeData()->hasFormat("text/uri-list")) //只能打开文本文件
e->acceptProposedAction(); //可以在这个窗口部件上拖放对象
}
void MainWindow::dropEvent(QDropEvent *e) //释放对方时,执行的操作
{
QList urls = e->mimeData()->urls();
if(urls.isEmpty())
return ;
QString fileName = urls.first().toLocalFile();
foreach (QUrl u, urls) {
qDebug()<setText(QString::fromLocal8Bit(data));
return true;
}
这里有个注意点,在MacOS中使用,我并没有捕获到dropEvent事件,只捕获了dragEnterEvent事件,使用dragEnterEvent事件也勉强可以达到效果,至于为什么没有捕获dropEvent事件,需要研究。