Qt实现拖放操作

拖放包括两个基本动作:拖动、放下。

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



示例问题:通过拖放文件实现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;
}

运行效果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrlturtle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值