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