首页 > 其他分享 >Qt: QDropEvent拖拽事件,拖拽打开文件

Qt: QDropEvent拖拽事件,拖拽打开文件

时间:2022-12-09 16:06:34浏览次数:45  
标签:return Qt QDropEvent void 拖拽 fileName textEdit include MainWindow

                 

Qt,C++ 学习交流群: 302558294(欢迎你的加入)



需求:

通过鼠标拖拽文本文件到应用程序,打开文本文件,读出其中的内容,显示到窗口中。


效果图:

Qt: QDropEvent拖拽事件,拖拽打开文件_QDragEnterEvent


主要思路:

1、重写 void dragEnterEvent(QDragEnterEvent *e);    void dropEvent(QDropEvent *e);

2、根据获取的文件名,打开文件,读文件。


源代码:

main.cpp

#include <QApplication>
#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 <QMainWindow>
#include <QTextEdit>

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 <QDragEnterEvent>
#include <QMimeData>
#include <QFile>
#include <QUrl>
#include <QDebug>
#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<QUrl> urls = e->mimeData()->urls();
if(urls.isEmpty())
return ;

QString fileName = urls.first().toLocalFile();

foreach (QUrl u, urls) {
qDebug()<<u.toString();
}
qDebug()<< urls.size();

if(fileName.isEmpty())
return;

if(readFile(fileName))
setWindowTitle(tr("%1 - %2").arg(fileName).arg("Drag File"));
}

bool MainWindow::readFile(const QString &fileName) //读文件
{
QFile file(fileName);
if(!file.open(QFile::ReadOnly | QFile::Text))
return false;

QByteArray data;
data = file.readAll();
textEdit->setText(QString::fromLocal8Bit(data));
return true;
}

标签:return,Qt,QDropEvent,void,拖拽,fileName,textEdit,include,MainWindow
From: https://blog.51cto.com/u_15907770/5926123

相关文章