知识库

wiki.linsakura.com

用户工具

站点工具


wiki:dev:qt:note:eventfilter

这是本文档旧的修订版!


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QDragEnterEvent>
#include <QMimeData>
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    //ui->textBrowser->setAcceptDrops(true);
    ui->textBrowser->installEventFilter(this);
 
    //this->setAcceptDrops(true);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if(obj == ui->textBrowser)
    {
        if(event->type() == QEvent::DragEnter)
        {
            QDragEnterEvent *dragEnterEvent = static_cast<QDragEnterEvent *>(event);
            dragEnterEvent->setDropAction(Qt::LinkAction);
            dragEnterEvent->accept();
            return true;
        }
        else if(event->type() == QEvent::Drop)
        {
            qDebug() << "xxx";
        }
    }
 
    return false;
}
 
//当用户拖动文件到窗口部件上时候,就会触发dragEnterEvent事件
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    //如果为文件,则支持拖放
    if (event->mimeData()->hasFormat("text/uri-list"))
        event->acceptProposedAction();
}
 
//当用户放下这个文件后,就会触发dropEvent事件
void MainWindow::dropEvent(QDropEvent *event)
{
    //注意:这里如果有多文件存在,意思是用户一下子拖动了多个文件,而不是拖动一个目录
    //如果想读取整个目录,则在不同的操作平台下,自己编写函数实现读取整个目录文件名
    QList<QUrl> urls = event->mimeData()->urls();
    if(urls.isEmpty())
        return;
 
    //往文本框中追加文件名
    foreach(QUrl url, urls) {
        QString file_name = url.toLocalFile();
        ui->textBrowser->append(file_name);
    }
}
wiki/dev/qt/note/eventfilter.1647242326.txt.gz · 最后更改: 2022/03/14 15:18 由 博丽幻月