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")
          }
    }

}

  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值