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;
}
运行效果如下:
因此一般需要实现两个事件:
示例问题:通过拖放文件实现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# 实现拖放操作
- 控件之间拖放操作(二)-----实现Treeview节点到DataGridView
- 在VB.NET中实现拖放操作
- Qt实现用户操作保存(撤销功能)
- 在VB.NET中实现拖放操作 DragDrop
- RSS阅读器制作之拖放操作的实现
- html5拖曳操作 HTML5实现网页元素的拖放操作
- qt如何实现一个图片选择操作
- Qt创建那个XML文档,并且对它实现查找,更新,插入等操作
- HTML5实现网页元素的拖放操作
- 拖放操作-实现Treeview到Treeview和DataGridView到Treeview
- 在C#中实现TreeView节点的拖放操作
- 在C#中快速实现拖放操作
- 在Qt的Model/View框架中实现Drag-Drop操作
- 实现在TreeView节点中进行拖放操作
- 控件之间拖放操作-----实现Treeview到Treeview
- 用C#.NET实现拖放操作实例
- Qt中实现拖放
- TX Text Control文字处理教程(13)实现拖放操作
- HTML5实现网页元素的拖放操作