QT实现用本地资源管理器来打开文件夹

QString path="文件夹路径";
    QDesktopServices::openUrl(QUrl("file:"+path, QUrl::TolerantMode));

在windows中QT编程,使用资源管理器来打开指定本地文件夹的方法:

第一种:使用Qprocess命令(相当于在cmd命令管理窗口执行命令)

QString strLogPath = "start " + "你的文件夹所在目录";
QProcess process(this);
process.setProgram("cmd");//设置命令形式
QStringList argument;
argument << "/c" << strLogPath;//在cmd命令中,/c代表“执行完命令后返回”。它表示在执行完命令后,程序将返回到调用cmd的环境中。使用/c参数可以避免程序在执行过长命令时处于等待状态而呈现假死的现象。
process.setArguments(argument);
process.start();
process.waitForStarted(); //等待程序启动
process.waitForFinished();//等待程序关闭
  1. QString strLogPath = "start " + "你的文件夹所在目录";:这行代码创建了一个QString对象,该对象包含一个字符串,这个字符串是"start "(一个英文单词"start"后面跟着一个空格)和一个目录路径(例如:"你的文件夹所在目录")。这个路径应该是你想在其中启动新进程的目录。
  2. QProcess process(this);:这行代码创建了一个QProcess对象。QProcess类用于在Qt应用程序中启动外部进程。这里的this是指当前的Qt对象,通常用于将父窗口与子窗口关联起来。
  3. process.setProgram("cmd");:这行代码设置了要执行的程序。这里,它设置为"cmd",即Windows的命令行解释器。
  4. QStringList argument;:这行代码创建了一个QStringList对象,该对象将用于存储命令行参数。
  5. argument << "/c" << strLogPath;:这行代码向QStringList对象中添加了两个参数。"/c"是一个cmd命令行的选项,意思是执行完命令后返回。strLogPath是上面定义的包含文件夹路径的字符串。
  6. process.setArguments(argument);:这行代码将上面定义的参数列表设置到QProcess对象中。
  7. process.start();:这行代码启动了进程。
  8. process.waitForStarted();:这行代码会阻塞当前线程,直到进程开始运行。
  9. process.waitForFinished();:这行代码会阻塞当前线程,直到进程完成执行。

总结:这段代码会启动一个新的cmd窗口,并执行"/c"命令(执行完就返回),然后执行"start " + 你的文件夹所在目录命令(在cmd中打开指定目录)。然后程序会等待直到这个cmd进程执行完毕。

第二种方法:

使用QT的QDesktopServices的方法去实现,注意里面的这个"file"一定要保留,不然会报下面这个错误:

ShellExecute  路径  failed (error 2).

QString path="文件夹路径";
QDesktopServices::openUrl(QUrl("file:"+path, QUrl::TolerantMode));

使用 QDesktopServices::openUrl() 方法打开一个文件或URL。在这个方法中,需要传递一个 QUrl 对象。一种不同的方式是直接使用 QUrl 构造一个URL,然后传递给 openUrl() 方法。

*********************************QDesktopServices的补充***********************************************

DesktopServices 类提供用于访问常见桌面服务的方法。

许多桌面环境提供的服务可供应用程序用来执行常见任务,例如打开网页,其方式既一致又考虑了用户的应用程序首选项。

此类包含为这些服务提供简单接口的函数,这些接口指示它们是成功还是失败。

openurl() 函数用于打开位于外部应用程序中任意 URL 的文件。对于与本地申请系统上的资源相对应的URL(URL方案为“文件”),将使用合适的应用程序来打开文件;否则,将使用 Web 浏览器来获取和显示文件。

用户的桌面设置控制是打开某些可执行文件类型进行浏览,还是改为执行这些文件类型。某些桌面环境配置为阻止用户执行从非本地 URL 获取的文件,或者在执行之前请求用户的许可。

在用户桌面环境的相应 Web 浏览器中打开给定的,如果成功则返回;否则返回 。truefalse

如果 URL 是对本地文件的引用(即 URL 方案是“文件”),则将使用合适的应用程序而不是 Web 浏览器打开它。

以下示例在 Windows 文件系统上打开一个文件,该文件位于包含空格的路径上:

QDesktopServices::openUrl(QUrl("file:///C:/Program Files", QUrl::TolerantMode));

如果指定了 URL,则用户的电子邮件客户端将用于打开包含 URL 中指定选项的 composer 窗口,类似于 Web 浏览器处理链接的方式。mailtomailto

例如,以下 URL 包含收件人 recipient (), subject (), 和body ():user@foo.comTestJust a test

mailto:user@foo.com?subject=Test&body=Just a test

第三种方法:

除了 QDesktopServices::openUrl() 和使用 QProcess 启动外部程序之外,还可以使用其他一些方法来实现相同的功能,例如使用 QDir 类来访问文件系统并打开文件或目录。下面是一个使用 QDir 的例子:

#include <QDir>  
  
QString path = "文件夹路径";  
QDir dir(path);  
if (dir.exists()) {  
    dir.open();  
} else {  
    // 处理路径不存在的情况  
}

这个例子中,我们首先创建一个 QDir 对象,并传入要访问的路径。然后,我们使用 exists() 方法检查路径是否存在,如果存在,就使用 open() 方法打开该目录。这样,用户就可以在文件管理器中直接打开指定的目录。

#AI诈骗进入高发期,普通人该如何防范?#

Qt实现资源管理器通常涉及到创建一个文件浏览器或者目录树结构的应用程序。以下是一个简单的概述: 1. **设置项目**:首先,确保你在Qt环境中设置了正确的项目,包括添加所需的QML和C++模块,如`QtQuick.Controls`、`QtQuick.Layouts` 和 `QtWidgets`。 2. **UI设计**:使用Qt Creator创建一个新的QML文件,例如`Explorer.qml`,并设计界面布局,包含一个`ListView`用于显示文件和目录,以及导航按钮等。 ```qml import QtQuick 2.0 import QtQuick.Controls 2.0 Window { width: 800; height: 600 title: "资源管理器" visible: true ListView { id: fileList anchors.fill: parent model: FileModel // 假设有一个FileModel实例提供数据 delegate: ItemDelegate { ... } } ... } ``` 3. **数据模型**:创建一个C++类(比如`FileModel`)作为数据模型,用于存储文件和目录的信息,并提供必要的加载和刷新方法。 4. **文件操作**:通过`QDir`类遍历文件系统,获取目录内容,然后将结果填充到模型中。可以利用信号槽机制处理用户交互,如点击列表项打开文件或进入子目录。 5. **事件处理**:在C++部分,监听用户的点击或其他操作,然后更新UI展示对应的文件信息。 ```cpp void FileModel::loadDirectory(const QDir &dir) { beginResetModel(); // 加载目录内容... endResetModel(); } // 然后在槽函数里,当用户点击时,调用loadDirectory方法 QObject::connect(fileList.model, &QAbstractListModel::currentIndexChanged, this, &FileModel::loadDirectory); ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Helloorld_11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值