QDesktopServices简单使用

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);

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,以下是使用QNetworkAccessManager下载服务器文件的基本步骤: 1. 创建一个QNetworkAccessManager对象,用于处理网络请求和响应。 2. 创建一个QNetworkRequest对象,设置请求的URL地址和其他必要参数,如请求头等。 3. 使用QNetworkAccessManager的get方法发送网络请求,并将返回的QNetworkReply对象连接到一个槽函数。 4. 在槽函数中,判断网络响应是否成功,如果成功,则将数据写入本地文件中,否则打印错误信息。 例如,以下是一个简单的示例代码: ```python import sys from PyQt5.QtCore import QUrl from PyQt5.QtGui import QDesktopServices from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply from PyQt5.QtWidgets import QApplication, QMessageBox class Downloader: def __init__(self, url, filepath): self.url = url self.filepath = filepath self.manager = QNetworkAccessManager() self.reply = None def download(self): request = QNetworkRequest(QUrl(self.url)) self.reply = self.manager.get(request) self.reply.finished.connect(self.onFinished) def onFinished(self): if self.reply.error(): QMessageBox.warning(None, 'Error', 'Failed to download file: {}'.format(self.reply.errorString())) else: with open(self.filepath, 'wb') as f: f.write(self.reply.readAll()) QDesktopServices.openUrl(QUrl.fromLocalFile(self.filepath)) if __name__ == '__main__': app = QApplication(sys.argv) downloader = Downloader('http://example.com/file.txt', 'file.txt') downloader.download() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了一个Downloader类,它接受一个URL和一个本地文件路径作为参数。在download方法中,我们使用QNetworkAccessManager发送一个get请求,并将返回的QNetworkReply对象连接到onFinished槽函数中。在onFinished槽函数中,我们检查响应是否成功,如果成功,则将数据写入本地文件中,并打开该文件。如果失败,则显示错误消息框。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lpl还在学习的路上

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

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

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

打赏作者

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

抵扣说明:

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

余额充值