QT:QML中读取文件(QDesktopServices和QFile)

目录

一.介绍

二.QDesktopServices:

1.添加头文件

2.声明函数

3.操作

4.注册

5.qml调用

三.QFile:

1.添加头文件

2.声明函数

3.读取指定文件名的文件内容

 4.注册

5.qml中调用

四.效果展示:

1.QDesktopServices:上方按钮点击打开文件

2.QFile:下方矩形框中读取文件

五.代码演示

1.h

2.cpp

3.main.cpp

4.qml


一.介绍

QDesktopServices:这个类主要用于与操作系统的桌面服务进行交互。它提供了一些函数来访问常见的桌面服务,例如打开文件夹或URL。使用QDesktopServices::openUrl()方法,可以打开位于任意外部应用程序的URL文件。如果URL指向的是本地文件系统资源,将会用一个合适的应用程序打开文件;否则,将使用Web浏览器获取并显示该文件。此外,QDesktopServices还可以用来打开特定于桌面环境的目录。

QFile:这个类专门用于操作文件,包括读取、写入、删除、重命名和拷贝等操作。它既可以操作文本文件,也可以操作二进制文件。在使用QFile类之前,需要引入相应的头文件<QFile>。创建QFile类的对象时,可以使用其构造函数,如QFile::QFile()QFile::QFile(const QString &name)来指定要操作的文件。

二.QDesktopServices:

1.添加头文件

#include <QDesktopServices> 包含了用于处理桌面服务的类和函数,用于在应用程序中实现与桌面环境相关的功能,例如打开网页、发送邮件等。通过包含 <QDesktopServices> 头文件,可以使用其中的类和函数来执行与桌面服务相关的操作。以下是一些常用的类和函数:

  • QDesktopServices::openUrl(const QUrl &url): 打开指定的URL。
  • QDesktopServices::openUrl(const QString &url): 打开指定的URL字符串。
  • QDesktopServices::openUrl(const QUrl &url, QIODevice::OpenMode mode): 以指定模式打开指定的URL。
  • QDesktopServices::openUrl(const QUrl &url, const QString &program): 使用指定的程序打开指定的URL。
  • QDesktopServices::openUrl(const QUrl &url, const QStringList &programs): 使用指定的程序列表中的任意一个程序打开指定的URL。
  • QDesktopServices::openUrl(const QUrl &url, const QString &program, QIODevice::OpenMode mode): 使用指定的程序以指定模式打开指定的URL。
  • QDesktopServices::openUrl(const QUrl &url, const QStringList &programs, QIODevice::OpenMode mode): 使用指定的程序列表中的任意一个程序以指定模式打开指定的URL。

2.声明函数

3.操作

接受一个QString类型的参数pdfPath。该函数使用QDesktopServices::openUrl方法打开指定路径的PDF文件。

4.注册

5.qml调用

三.QFile:

1.添加头文件

#include <QFile> 是C++中用于包含Qt库中的QFile类的预处理指令。QFile类提供了对文件的读写操作,可以用于创建、读取和写入文本或二进制文件。

#include <QTextStream> 是C++中用于包含Qt库中的QTextStream类的预处理指令。QTextStream类提供了对文本流的读写操作,可以用于处理文本数据。

2.声明函数

3.读取指定文件名的文件内容

1.QFile file(fileName);:创建一个QFile对象,用于操作文件。

2.if (!file.open(QIODevice::ReadOnly)) {:尝试以只读模式打开文件。如果无法打开文件,则return "Cannot open file: " + fileName;:返回一个错误信息,表示无法打开指定的文件。

3.QTextStream in(&file);:创建一个QTextStream对象,与文件关联起来,用于读取文件内容。

4.QString content;:定义一个QString类型的变量content,用于存储文件的内容。

5.while (!in.atEnd()) {:使用循环来逐行读取文件内容,直到到达文件末尾。

6.content += in.readLine() + "\\n";:将读取到的每一行内容添加到content中,并在每行后面添加换行符"\n"。

7.file.close();:关闭文件。

8.return content;:返回读取到的文件内容。

 4.注册

5.qml中调用

四.效果展示:

1.QDesktopServices:上方按钮点击打开文件

2.QFile:下方矩形框中读取文件

五.代码演示

1.h

#ifndef READTXT_H
#define READTXT_H

#include <QDesktopServices>
#include <QObject>
#include <QFile>
#include <QTextStream>

class readtxt : public QObject
{
    Q_OBJECT
public:
    readtxt();

    Q_INVOKABLE void setShowPDF(QString pdfPath);


    Q_INVOKABLE QString readFile(const QString &fileName);

};

#endif // READTXT_H

2.cpp

#include "readtxt.h"
#include <QDesktopServices>
#include "QUrl"
#include <QFile>
readtxt::readtxt()
{

}

void readtxt::setShowPDF(QString pdfPath)
{
  QDesktopServices::openUrl(QUrl(pdfPath,QUrl::TolerantMode));
  qDebug()<<"ssssssssss";
}


QString readtxt::readFile(const QString &fileName)
{
    QFile file(fileName);

        if (!file.open(QIODevice::ReadOnly)) {
            return "Cannot open file: " + fileName;
        }

        QTextStream in(&file);
        QString content;

        while (!in.atEnd()) {
            content += in.readLine() + "\\n";
        }

        file.close();
        return content;
}

3.main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "readtxt.h"
#include <QQmlEngine>
#include <QQmlContext>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

//    readtxt Qmlreadtxt;

    qmlRegisterType<readtxt>("Qmlreadtxt", 1, 0, "Qmlreadtxt");

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
//    engine.rootContext()->setContextProperty("readtxt",&Qmlreadtxt);


    return app.exec();
}

4.qml

// main.qml
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import Qmlreadtxt 1.0

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Qmlreadtxt{
        id: ww
    }

    Button {
        width: 100
        height: 50
        text: "点击"
        onClicked: {
            ww.setShowPDF("D://111.txt")
        }
    }


    Rectangle{
        width: 600
        height: 300
        anchors.bottom: parent.bottom
        TextArea {
              id: textArea
              anchors.fill: parent
              text: ww.readFile("D://111.txt")
          }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/631673.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试 - 山峰个数(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

使用TerraScan静态扫描KubernetsIaC文件

terrascan https://github.com/tenable/terrascan Terrascan 是基础架构即代码的静态代码分析器。Terrascan 允许&#xff1a; 将基础架构作为代码无缝扫描&#xff0c;以查找错误配置。监控已配置的云基础架构&#xff0c;以查找引入终端安全评估漂移的配置更改&#xff0…

k8s证书续期

证书即将到期了如何进行证书续签 k8s版本V1.23.6 1.查看证书期限 kubeadm certs check-expiration如果证书即将到期&#xff0c;此处的天数应该是几天&#xff0c;在过期之前进行续期&#xff0c;保证集群的可用 2. 备份证书 避免出现问题可以回退 cp -r /etc/kubernetes …

Swift知识点(三)

11. init、deinit、可选链、协议、元类型 构造和析构 构造方法 构造方法是一种特殊的方法 一个对象创建完毕后&#xff0c;都需要调用构造方法进行初始化&#xff08;比如属性的初始化&#xff09; 验证&#xff1a;init方法是在对象创建完毕的时候调用 回到存储属性 在对…

【全开源】国际版JAVA游戏陪玩系统源码陪练APP源码H5源码电竞系统源码支持Android+IOS+H5

国际版游戏陪玩系统&#xff1a;连接全球玩家的桥梁 在数字化时代&#xff0c;游戏已成为全球范围内跨越文化和地域的桥梁。随着游戏产业的蓬勃发展&#xff0c;玩家们对于游戏体验的需求也日益多样化。为了满足这一市场需求&#xff0c;我们隆重推出“国际版游戏陪玩系统”&a…

electron的Remote模块

03 【electron的Remote模块】 在渲染进程里&#xff08;比如index.html里面加载了一些js文件&#xff0c;那里面的js如果要使用到 BrowserWindow 这些属性的话就必须使用 remote&#xff09; 使用 remote 模块, 你可以调用 main 进程对象的方法 1.electron14.0之前版本使用 …

【微信小程序开发(从零到一)【婚礼邀请函】制作】——邀请函界面的制作(2)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

一篇文章拿下 Redis缓存穿透,缓存击穿,缓存雪崩

文章目录 ☃️缓存击穿❄️❄️解决方案一、使用锁❄️❄️解决方案二、逻辑过期方案❄️❄️解决方案三、永不过期 主动更新❄️❄️解决方案四、接口限流❄️❄️实战❄️❄️❄️利用互斥锁解决缓存击穿问题❄️❄️❄️利用逻辑过期解决缓存击穿问题 ☃️缓存穿透❄️❄️缓…

【python】将json内解码失败的中文修改为英文(‘utf-8‘ codec can‘t decode,labelme标注时文件名未中文)

出现问题的场景&#xff1a; 语义分割数据集&#xff0c;使用labelme工具进行标注&#xff0c;然后标注图片存在中文名&#xff0c;导致json标签文件写入中文图片名&#xff0c;从而解析失败。 代码解析json文件时&#xff0c;出现报错&#xff1a; python脚本需求&#x…

org.postgresql.util.PSQLException: 错误: 关系 “dual“ 不存在

springboot 项目连接 postgreps&#xff0c;启动时报错 org.postgresql.util.PSQLException: 错误: 关系 "dual" 不存在。 查阅资料后发现这是由配置文件中的配置 datasource-dynamic-druid-validationQuery 导致的 spring:datasource:druid:stat-view-servlet:ena…

SDL系列(四)—— 事件机制

事件循环 大多数多媒体程序依靠 事件系统 来处理输入。 SDL 为处理输入事件提供了灵活的 API 。 本质上&#xff0c; SDL 将来自设备&#xff08;如键盘&#xff0c;鼠标或控制器&#xff09;的输入记录为 事件 &#xff0c;将它们存储在 “ 事件队列 ”中。 您可以将此…

使用Xterm实现终端构建

————html篇———— // 需要使用Xterm Xterm的官网&#xff1a; Xterm.js 新建项目 增加基本文件 下载 框架 npm init -y Xterm依赖 npm install xterm/xterm 参考文档写的代码 贴入代码 <html><head><link rel"stylesheet" href"nod…

【prometheus】prometheus基于consul服务发现实现监控

目录 一、consul服务发现简介 1.1 consul简介 二、prometheus配置 2.1 node-exporter服务注册到consul 2.2 修改prometheus配置文件 【Prometheus】概念和工作原理介绍_prometheus工作原理-CSDN博客 【Prometheus】k8s集群部署node-exporter 【prometheus】k8s集群部署p…

企业微信hook接口协议,ipad协议http,大文件网络上传

大文件网络上传 参数名必选类型说明url是String网络图片地址 请求示例 {"uuid":"2b0863724106a1160212bd1ccf025295","authkey":"0AAxxx031", "filekey":"346b7bff-08d5-4ac2-bc67-fd10e3eb2388", "fileur…

六西格玛绿带培训:解锁质量工程师的职场新篇章

在质量管理这条道路上&#xff0c;我们或许都曾有过这样的疑问&#xff1a;为何付出了同样的努力&#xff0c;却未能获得预期的回报&#xff1f;当我们看到身边的同行们逐渐步入高薪的行列&#xff0c;而自己却似乎陷入了职业的泥沼&#xff0c;这种对比无疑令人倍感焦虑。然而…

win10安装docker

控制面板-> 程序和功能 最好是是管理员进入cmd PS C:\Windows\system32> wsl --status PS C:\Windows\system32> wsl --install -d Ubuntu 正在安装: 适用于 Linux 的 Windows 子系统 已安装 适用于 Linux 的 Windows 子系统。 正在安装: Ubuntu 已安装 Ubuntu。 请…

银行风险系统的全面解析:功能作用与系统间的互联互通

银行风险管理系统是银行为控制风险而建立的一套重要系统&#xff0c;主要用于评估、监测和控制银行面临的各种风险&#xff0c;包括信用风险、市场风险、操作风险等。 一、主要功能 风险识别&#xff1a;系统首先识别在业务开展中可能会面临的各种风险。这通常涉及对客户信息、…

Kotlin核心编程知识点-02-面向对象

文章目录 1.类和构造方法1.1.Kotlin 中的类及接口1.1.1.Kotlin 中的类1.1.2.可带有属性和默认方法的接口 1.2.更简洁地构造类的对象1.2.1.构造方法默认参数1.2.2.init 语句块1.2.3.延迟初始化&#xff1a;by lazy 和 lateinit 1.3.主从构造方法 2.不同的访问控制原则2.1.限制修…

【虚拟仿真】Unity3D中实现对大疆无人机遥控器手柄按键响应

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近项目中需要用到大疆无人机遥控器对程序中无人机进行控制,遥控器是下图这一款: 博主发…

【案例】根据商品的颜色进行分组,同一种颜色的商品可以对应多种尺寸、价格以及库存

效果展示 效果说明 输入商品的颜色、尺寸后点击添加按钮&#xff0c;即可将对应的商品信息添加到下方的表格当中&#xff0c;表格中除了会显示商品的颜色和尺寸之外&#xff0c;还会显示商品的价格和库存&#xff0c;并且可以对商品的价格和库存进行修改&#xff0c;并且根据颜…