この記事では、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;
}
スクリーンショット: