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);
失败了,但不是因为这是中文,因为经过实验,有些中文文件夹也能被发现。