Qt拖放一

本文简要介绍Qt的拖放实现,实现拖放功能,主要有4个函数:

dragEnterEvent(QDragEnterEvent *event),dropEvent(QDropEvent *event),dragLeaveEvent(QDragLeaveEvent *event),dragMoveEvent(QDragMoveEvent *event)。

主要使用到:dragEnterEvent(QDragEnterEvent *event),dropEvent(QDropEvent *event)这2个函数。

核心代码:

#pragma execution_character_set("utf-8")
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QMimeData>
#include<QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //让mainwindow对drop事件处理,而不是让textEdit对drop事件处理。
    //该拖放事件是继承mainwindow重写的  而不是继承textEdit
    ui->textEdit->setAcceptDrops(false);
    this->setAcceptDrops(true);

    setWindowTitle("拖拽Demo");
}

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

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

void MainWindow::dropEvent(QDropEvent *event)
{
    ui->textEdit->append("dropEvent");
    QList<QUrl> urls = event->mimeData()->urls();
    if(urls.isEmpty())
    {
        return;
    }
    qDebug()<<"urls"<<urls;
    QString fileName = urls.first().toLocalFile();
    if(fileName.isEmpty())
    {
        return;
    }
    if(readFile(fileName))
    {
        setWindowTitle(fileName+"  DragFile");
    }/**/

}

bool MainWindow::readFile(const QString &fileName)
{
    bool r = false;
    QFile file(fileName);
    QTextStream in(&file);
    in.setCodec("UTF-8");//处理utf8中文
    QString content;
    if(file.open(QIODevice::ReadOnly))
    {
        in>>content;
        r = true;
    }
    ui->textEdit->append(content);
    return r;
}

截图:

猜你喜欢

转载自blog.csdn.net/weixin_41882459/article/details/113858826