# DragFileTableView **Repository Path**: scenario-samples/drag-file-table-view ## Basic Information - **Project Name**: DragFileTableView - **Description**: HarmonyOS PC实现拖拽文件并添加到tableView列表是HarmonyOS PC的Qt项目高频使用场景之一。 本示例在实现拖拽文件时启动使用setAcceptDrops(true);启动拖拽功能,通过遍历mimeData->urls()返回的数据来获取拖拽的文件信息。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-12 - **Last Updated**: 2026-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HarmonyOS PC实现拖拽文件并添加到tableView列表示例 ## 场景介绍 HarmonyOS PC实现拖拽文件并添加到tableView列表是HarmonyOS PC的Qt项目高频使用场景之一。 本示例在实现拖拽文件时启动使用`setAcceptDrops(true);`启动拖拽功能,通过遍历`mimeData->urls()`返回的数据来获取拖拽的文件信息。 ## 效果预览 ## 实现思路 编写自定义的`FileTableView`类继承[QTableView](https://doc.qt.io/archives/qt-5.15/qtableview.html)用于扩展拖拽功能,同时负责数据展示。QStandardItemModel负责存储文件名及文件路径数据,用于提供数据管理能力。main.cpp的部分代码如下: - 设置允许接收拖拽: ```cpp setAcceptDrops(true); ``` - 事件中调用[acceptProposedAction](https://doc.qt.io/archives/qt-5.15/qdropevent.html#acceptProposedAction)接受拖拽操作,代码如下: ```cpp event->acceptProposedAction(); ``` - 当文件被放下时触发dropEvent处理函数,通过获取文件信息并创建表格行,将文件名和路径添加到模型中,代码如下: ```cpp void dropEvent(QDropEvent *event) override { auto *model = qobject_cast(this->model()); if (!model) return; const QList urls = event->mimeData()->urls(); for (const QUrl &url : urls) { if (!url.isLocalFile()) continue; QFileInfo info(url.toLocalFile()); QList rowItems; rowItems << new QStandardItem(info.fileName()); rowItems << new QStandardItem(info.absoluteFilePath()); model->appendRow(rowItems); } event->acceptProposedAction(); } ``` ## 说明 使用该示例需要将`libs\arm64-v8a下的libplugins_platforms_qopenharmony.so`文件替换为本地Qt安装路径`\plugins\platforms`目录下的`libplugins_platforms_qopenharmony.so`;将开源Qt安装路径配置到`QT_PREFIX`中,可以选择下面两个方案中的一个: - 修改`entry\src\main\cpp\qtModule\CMakeLists.txt`中的`set(QT_PREFIX "D:\\arkTSProject\\QtSdkOpen\\ohos17_arm64-v8a_release")`为编译出的Qt产物目录: ```txt # 检查环境变量是否存在 if(DEFINED ENV{WORKSPACE}) set(QT_PREFIX $ENV{WORKSPACE}/code/SDK/Qt/QtOpenSDK) message(STATUS "get QT_PREFIX PATH: ${QT_PREFIX}") else() set(QT_PREFIX "D:\\arkTSProject\\QtSdkOpen\\ohos17_arm64-v8a_release") message(STATUS "WORKSPACE not defined, using default patt: ${QT_PREFIX}") endif() ``` - 或者删除`entry\src\main\cpp\qtModule\CMakeLists.txt`中的`QT_PREFIX`定义,在`entry\build-profile.json5`中设置`QT_PREFIX`: ```json "buildOption": { "externalNativeOptions": { "path": "./src/main/cpp/CMakeLists.txt", "arguments": "-DQT_PREFIX=D:\\arkTSProject\\QtSdkOpen\\ohos17_arm64-v8a_release", "cppFlags": "", "abiFilters": ["arm64-v8a"] } }, ``` ## 约束与限制 * 本示例支持API Version 20 Release及以上版本。 * 本示例支持HarmonyOS 6.0.0 Release SDK及以上版本。 * 本示例需要使用DevEco Studio 6.0.0 Release及以上版本进行编译运行。 ## 工程目录 ``` ├─entry │ ├─libs/arm64-v8a │ │ └─libplugins_platforms_qopenharmony.so // Qt安装目录'plugins\platforms'HarmonyOS平台插件so │ └─src │ ├─main │ │ ├─cpp │ │ │ ├─CMakeLists.txt // Qt项目CMakeList文件 │ │ │ └─main.cpp // Qt主程序 │ │ ├─ets │ │ │ ├─abilitystage │ │ │ │ └─MyAbilityStage.ets │ │ │ ├─entryability │ │ │ │ └─EntryAbility.ets // 应用入口 │ │ │ └─pages │ │ │ └─Index.ets // 主页面实现 │ │ ├─resources // 应用资源目录 │ │ └─module.json5 // 模块级核心配置文件 │ ├─build-profile.json5 // 工程结构/构建/定制化配置信息 │ └─oh-package.json5 // 描述全局配置 └─hvigor // 构建环境配置 ``` ## 参考文档 [开源版Qt](https://gitcode.com/qtforohos/Build) [QTableView](https://doc.qt.io/archives/qt-5.15/qtableview.html) [acceptProposedAction](https://doc.qt.io/archives/qt-5.15/qdropevent.html#acceptProposedAction)