您的位置:首页 > 编程语言 > Qt开发

Qt实现拖放操作

2016-11-04 17:01 369 查看
拖放包括两个基本动作:拖动、放下。

因此一般需要实现两个事件:





示例问题:通过拖放文件实现Qt应用直接读取文本文件

解决:重写两个基本事件实现拖放识别文件并实现文件读取和显示。

    另外,为识别文件类型,在剪贴板和拖放系统中常使用MIME类型,Qt中的实现为QMimeData类。 可以通过官方示例MIMETypeBrowser检索所有的MIME类型。

示例代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
textEdit=new QTextEdit;
setCentralWidget(textEdit);
setWindowTitle(tr("Drag and drop test"));

textEdit->setAcceptDrops(false);
this->setAcceptDrops(true);

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
if(event->mimeData()->hasFormat("text/uri-list"))
event->acceptProposedAction();
}

void MainWindow::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(QString(fileName+"-DragFile"));
}

bool MainWindow::readFile(const QString &fileName)
{
QFile fileToRead(fileName);
if(!fileToRead.open(QFile::ReadOnly|QFile::Text))//读
{
textEdit->setText(tr("couldn't open the file for reading"));
return false;
}
QTextStream in(&fileToRead);
textEdit->append(in.readAll());
in.flush();
fileToRead.close();
return true;
}

运行效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ qt5 应用 拖放技术