Qt拖拽简单小demo

    科技2024-05-25  74

    Qt拖拽简单小demo

    拖拽文件到窗口中,读取该文件,并打印出来。

    demo.h
    #pragma once #include <QDebug> #include <QFile> #include <QTextStream> #include <QtWidgets/QWidget> #include <QDrag> #include <QDragEnterEvent> #include <QDropEvent> #include <QMimeData> #include <QList> class Demo : public QWidget { Q_OBJECT public: Demo(QWidget *parent = Q_NULLPTR); protected: // 拖的过程的事件 void dragEnterEvent(QDragEnterEvent *a_event); // 鼠标放下的事件 void dropEvent(QDropEvent *a_event); };
    demo.cpp
    #include "demo.h" Demo::Demo(QWidget *parent) : QWidget(parent) { // 设置组件是否允许放置,默认不允许 setAcceptDrops(true); } // 拖动的事件 void Demo::dragEnterEvent(QDragEnterEvent* a_event) { // 如果拖动的事件中有url,则允许drop if (a_event->mimeData()->hasUrls()) { // 如果未调用,则无法drop a_event->acceptProposedAction(); } } // drop事件 void Demo::dropEvent(QDropEvent* a_event) { // 获得所有url的列表,拖拽是支持同时拖拽多个文件的 QList<QUrl> urlList = a_event->mimeData()->urls(); QFile file; for (int i = 0; i < urlList.size(); ++i) { // 将url转换为本地的文件名 file.setFileName(urlList[i].toLocalFile()); // 打开文件 if (!file.open(QIODevice::ReadOnly)) { qDebug() << "open failed"; exit(0); } // 读取文件内容 QTextStream stream(&file); qDebug() << stream.readAll(); file.close(); } }
    Processed: 0.010, SQL: 8