QDesktopServices简单使用

QDesktopServices的openUrl()函数可以用来打开本地文件或网页,支持.cpp、.jpg、.exe等不同类型的文件。在处理路径有空格或中文时可能出现错误,需要正确处理编码。QStandardPaths在Qt5中替代了Qt4的QDesktopServices::storageLocation,提供访问系统标准路径如家目录、桌面、文档和图片等的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QDesktopServices可以干什么?

打开本地文件,使用浏览器打开网页。


1.openUrl()函数


该函数用于打开外部应用程序中位于任意url的文件。

对于本地文件系统上的资源相对应的URL(url模式为"file")

将使用合适的应用程序来打开该文件;

否则,将使用web浏览器获取并显示该文件。

(1)打开一个.cpp文件

    QString native_str="D:\\Qt\\Qt5Book\\Qt5.9Samp\\csdn\\page\\page\\main.cpp";
    QString path=QDir::fromNativeSeparators(native_str);
    QDesktopServices::openUrl(QUrl(path));

默认使用QtCreator打开了该文件

 (2)打开一个.jpg文件。

    QString native_str="D:\\Qt\\Qt5Book\\Qt5.9Samp\\csdn\\page\\page\\bg.jpg";
    QString path=QDir::fromNativeSeparators(native_str);
    QDesktopServices::openUrl(QUrl(path));

 (3)打开.exe文件

    QString native_str="E:\\Qt\\5.9.1\\mingw53_32\\bin\\assistant.exe";
    QString path=QDir::fromNativeSeparators(native_str);
    QDesktopServices::openUrl(QUrl(path));

    QString native_str="E:\\CloudMusic\\cloudmusic.exe";
    QString path=QDir::fromNativeSeparators(native_str);
    QDesktopServices::openUrl(QUrl(path));

 

 

 (4)打开网页内容

QString native_str="https://www.baidu.com/";
QDesktopServices::openUrl(QUrl(native_str));
    QString native_str="https://www.codemart.com/projects?labelId=&name=qt&page=1&role=&skill=";
    QDesktopServices::openUrl(QUrl(native_str));

(5)路径中有空格时出现错误

    QString native_str="C:\\Program Files (x86)\\Lenovo\\SLBrowser\\SLBrowser.exe";
    QString path=QDir::fromNativeSeparators(native_str);
    QDesktopServices::openUrl(QUrl(path));

ShellExecute 'c:/Program Files (x86)/Lenovo/SLBrowser/SLBrowser.exe' failed (error 2).

execute:执行 

(6)路径中出现中文报错

    QString native_str="D:\\Qt\\Qt5Book\\Qt5.9Samp\\csdn\\page\\注释.txt";
    QString path=QDir::fromNativeSeparators(native_str);
    QDesktopServices::openUrl(QUrl(path));

 ShellExecute 'd:/Qt/Qt5Book/Qt5.9Samp/csdnpage/???.txt' failed (error 2).

 使用如下语句

    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF_8"));

仍未成功

ShellExecute 'd:/Qt/Qt5Book/Qt5.9Samp/csdn/page/注释.txt' failed (error 2).

但识别出了中文。 

2.

QDesktopServices::storageLocation(QDesktopServices::PicturesLocation)在Qt5中报错

因为这是Qt4中的方法。

Qt5中使用QStandardPaths

QStandardPaths类提供用于访问标准路径的方法

该类包含用于查询本地文件系统上的标准位置的函数。

所谓系统标准路径:指的是本地文件系统中,用户特定目录或者系统的配置目录

比如windows系统中的"我的文档","视频"等目录位置。

对于一个大型项目,系统的标准路径是保存数据,配置信息的好地方。

例如,一个应用程序需要把下载好的文档保存在本地文件系统的某个地方。

有的人可能会把这个文档保存在应用程序所在的工作目录中

但有时我们不希望把数据放在工作目录。

参考Qt:QStandardPaths类_OceanStar的学习笔记的博客-CSDN博客

(感谢上面这篇文章) 

(1)locate

[static]QString QStandardPaths::locate(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = LocateFile)

 fileName是要查询的文件名或目录名

QStandardPaths::LocateOptions说明
QStandardPaths::LocateFile只返回文件
QStandardPaths::LocateDirectory只返回目录

图片中的Path type 对应第一个参数

 

实例: 

a.家目录

    qDebug() <<   QStandardPaths::locate(QStandardPaths::HomeLocation, QString(),
                                              QStandardPaths::LocateDirectory);

C:/Users/xxx/

b.桌面

    qDebug() <<   QStandardPaths::locate(QStandardPaths::DesktopLocation, QString(),
                                              QStandardPaths::LocateDirectory);

 C:/Users/xxx/Desktop/

c.我的文档

    qDebug() <<   QStandardPaths::locate(QStandardPaths::DocumentsLocation, QString(),
                                                      QStandardPaths::LocateDirectory);

 C:/Users/xxx/Documents/

d.图片

    qDebug() <<   QStandardPaths::locate(QStandardPaths::PicturesLocation, QString(),
                                                      QStandardPaths::LocateDirectory);

C:/Users/连沛亮/Pictures

  e.在C:/Users/连沛亮/Pictures/ 下找图片 开心果.png

    qDebug() <<   QStandardPaths::locate(QStandardPaths::PicturesLocation, QString("开心果.png"),
                                                      QStandardPaths::LocateFile);

C:/Users/xxx/Pictures/开心果.png

QString()必须完整,写成开心果,就找不到了

f.在C:/Users/连沛亮/Pictures/目录下查找文件夹名为abcde的文件夹

 

    qDebug() <<   QStandardPaths::locate(QStandardPaths::PicturesLocation, QString("abcde"),
                                                      QStandardPaths::LocateDirectory);

 C:/Users/连沛亮/Pictures/abcde

g. 在C:/Users/连沛亮/Pictures/目录下查找文件夹名为的文件夹 “屏幕截图"

    qDebug() <<   QStandardPaths::locate(QStandardPaths::PicturesLocation, QString("屏幕截图"),
                                                      QStandardPaths::LocateDirectory);

失败了,但不是因为这是中文,因为经过实验,有些中文文件夹也能被发现。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伸头看云朵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值