前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >05应用程序设计和文件操作

05应用程序设计和文件操作

作者头像
天天Lotay
发布2023-10-15 18:34:34
发布2023-10-15 18:34:34
18100
代码可运行
举报
文章被收录于专栏:嵌入式音视频嵌入式音视频
运行总次数:0
代码可运行

一、 给应用程序设置菜单栏

比如:

在qt中,如果想要使用菜单栏功能,那么界面的基类要选择QMainWindow,不能选择QWidget QDialog 实现菜单栏步骤如下: 第一步:在UI设计师,直接双击菜单栏

第二步:在UI设计师,修改文本内容和其他设置

进行设置

设置的效果图如下:

给菜单选项,增加图片资源

二、输入对话框(QInputDialog)

让用户比较方便的输入一些单一信息(The QInputDialog class provides a simple convenience dialog to get a single value from the user) 头文件: #include 在Qt中,提供了五个方法来给用户使用 Five static convenience functions are provided: getText(), getMultiLineText(), getInt(), getDouble(), and getItem() 静态函数的原型:

参数

用处

QString

getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)

功能:返回一个单行的字符串信息 参数说明:

  • 参数一:QWidget *parent ----- 输入对话框的 父部件,一般传this
  • 参数二:const QString &title ---- 输入对话框的标题,用户自定义
  • 参数三:const QString &label ---- 输入信息提示 用户定义 后面的参数默认即可
  • 返回值:单行输入的字符串信息 具体用法:
代码语言:javascript
代码运行次数:0
运行
复制
void InputDialogWin::on_inputSetButton_clicked()
{
     //[1] 打开输入对话框,
  // QString name =  QInputDialog::getText(this,"名字修改","请重新输入名字:"); //单行输入
   QString name= QInputDialog::getMultiLineText(this,"名字修改","请重新输入名字:"); //多行输入
     //[2] 输入信息 ---- >在输入对话框中,完成
    // [3] 得到它的返回值,并更新到UI
     ui->nameLabel->setText(name);
}

三、QFile---- 文件类

该类是一个用户读写文件的接口,它继承于QFileDevice

在QIODevice类中,定义了访问I/O设备接口: QFile is an I/O device for reading and writing text and binary files and resources(QFile类可以读写文本文件、二进制文件及资源文件),对于文件的读写还可以使用QTextStream or QDataStream.

读接口:

参数

用处

qint64

read(char *data, qint64 maxSize)//一次读取maxSize大小的数据存放在以data为首的内存地址上

QByteArray

read(qint64 maxSize)

QByteArray

readAll()—>一次性读取所有的数据

按行来读取文件

代码语言:javascript
代码运行次数:0
运行
复制
qint64readLine(char *data, qint64 maxSize)QByteArrayreadLine(qint64 maxSize = 0)

参数说明:

  • char *data ----- 存放读取出来数据首地址
  • qint64 maxSize ------ 读取的长度,如果不够,则按实际的来读取
  • 返回值: QByteArray 通常我们会将转它自动转换化QString

参数

用处

QString &

operator=(const QByteArray &ba)

QString

data = file.readAll();

写接口:

参数

用处

qint64

write(const char *data, qint64 maxSize)

qint64

write(const char *data)

qint64

write(const QByteArray &byteArray)

参数说明:

  • const char *data ----- 写入数据的首地址
  • qint64 maxSize ---- 写入的大小,如果不够,则按实际写入
  • const QByteArray &byteArray ------> 写一个字节数组 而我们通常获取到的数据是QString QString类提供成员函数如下:

参数

用处

QByteArray

toUtf8() const

功能:将QString转换QByteArray

QFile功能接口函数:

参数

QFile(const QString &name, QObject *parent)

QFile(QObject *parent)

QFile(const QString &name)

该构造函数可以通过指定一个文件的路径,从而得到一个文件对象 QFile() 和

参数

用处

void

setFileName(const QString &name)

打开文件接口函数

代码语言:javascript
代码运行次数:0
运行
复制
bool QFile::open(QIODevice::OpenMode mode)

功能:以指定的方式来打开文件

  • QIODevice::ReadOnly ----- 只读
  • QIODevice::WriteOnly ---- 只写
  • QIODevice::ReadWrite ---- 读写
  • QIODevice::Append ----- 以在文件末尾追加数据
  • QIODevice::Truncate ---- 将文件的长度截断为零,那么文件的数据为空

备注:如果文件不存在时,想要创建文件,那么指定的方式要是WriteOnly or ReadWrite

如果QT中,在打开一个文件时,该文件不存在,那么,想要自动创建它,则打开文件时,必须要有写的权限:QIODevice::WriteOnly 或者 QIODevice::ReadWrite

代码语言:javascript
代码运行次数:0
运行
复制
    //[1]打开一个文件
    QFile file("./text.txt"); //当前路径下的txt文件,如果该文件不存在,那么自动创建

   //[2] open
    if(file.open(QIODevice::ReadWrite))
    {
         QString data = "helloworld";

         file.write(data.toUtf8());
    }

file.close();

在读文件数据时,可能出现的情况:

读文件数据的方式:

代码语言:javascript
代码运行次数:0
运行
复制
 QFile file1("C:/Users/PC/Desktop/text.txt");
    if(file1.open(QIODevice::ReadOnly))
    {
        QString data = file1.readLine();
        ui->label->setText(data);
#if 0
        while(!file1.atEnd())
        {
            QString data = file1.readLine();
            qDebug() << data;
		}
#endif
}
file1.close();

四 JSON数据格式

JSON就是数据封装形式,它是用来封装数据,相当于一个 包装盒子。 JSON基本概念:

  1. JSON对象 ---- > 单个类型的数据,比如:int char string
  2. JSON数组 ----> 相当于一个数组,可以用来存放:int char ,类类型

在数据封装的格式中,

  1. 使用符号“{ }" 代表JSON对象
  2. 使用符号"[ ]"代表数组

JSON对象和JSON数组的关系:

  • JSON对象可以嵌套JSON数组
  • JSON数组可以嵌套JSON对象
  • JSON对象可以嵌套JSON对象
  • JSON数组可以嵌套JSON数组

了解JSON数据格式:

代码语言:javascript
代码运行次数:0
运行
复制
{  ---- json对象
    "error_code": 0, /*返回码*/
    "reason": "请求成功!",
    "result": [ --- json数组
        {  ---- 数据中的元素的类型为json对象
            "day": 1,  /*日*/
            "des": "1907年11月1日 电影导演吴永刚诞生   吴永刚,1907年11月1日生于江苏吴县。1932年后参加影片《三个摩登女性》、《母性之光》的拍摄工作。1934年在联华影片公司编导处女作《神女》,一举成名,...",  /*描述*/
            "id": 9000,  /*事件ID*/
            "lunar": "丁未年九月廿六",
            "month": 11,  /*月份*/
            "pic": "",  /*图片*/
            "title": "电影导演吴永刚诞生",  /*事件标题*/
            "year": 1907  /*年份*/
        },
        {
            "day": 1,
            "des": "1902年11月1日 挪威作家格里格诞生   格里格,1902年11月1日生于卑尔根。挪威作家。   青年时代在奥斯陆和牛津求学,好旅行。1924年出版描写海员生活的小说《航船在前进》。1926年至1927年在...",
            "id": 9010,
            "lunar": "壬寅年十月初二",
            "month": 11,
            "pic": "",
            "title": "挪威作家格里格诞生",
            "year": 1902
        },
        {
            "day": 1,
            "des": "1911年11月1日,清廷宣布解散皇族内阁,任命袁世凯为内阁总理大臣,要他赶快从前线回京,筹组“责任内阁”。11月13日,袁世凯抵达北京,16日组织新内阁,以梁郭彦为外务大臣,赵秉钧为民政大臣,...",
            "id": 3577,
            "lunar": "辛亥年九月十一",
            "month": 11,
            "pic": "",
            "title": "袁世凯出任清朝内阁总理大臣",
            "year": 1911
        }
    ]
}

从上面的格式可以看出:JSON数据都是键值对(key-value),可以通过键来获取对应的值

在解析数据之前,必须要保证数据格式的正确性,可以在网上直接在线验证格式:https://www.sojson.com/

在Qt中,对于JSON数据的接口:使用面向对象的思想来进行描述

  • JSON文件 ------ 后缀(json)QJsonDocument 比如:hello.json
  • JSON对象 -----QJsonObject
  • JSON数组 ------ QJsonArray

关于json接口类,这些类是属于QT += core

在Qt中,解析JSON数据步骤:

  1. 第一步:将JSON文件转换成QJsonDocument对象,具体来讲,是将json文件中的数据转换成 json文档对象
代码语言:javascript
代码运行次数:0
运行
复制
       QJsonDocument 
fromJson(const QByteArray &json, QJsonParseError *error = nullptr)

功能:将QByteArray &json转换成QJsonDocument

参数说明:

  • QByteArray &json ------- json数据,它可以从JSON文件中进行读取
  1. 第二步:从QJsonDocument对象中将JSON数据拿出来 对于QJsonDocument中,只有两个部分组成:QJsonArray和 QJsonObject

参数

用处

QJsonObject

object() const

功能:从QJsonDocument中得到一个QJsonObject

参数

用处

QJsonArray

array() const

功能:从QJsonDocument中得到一个QJsonArray

  1. 第三步: 要 根据提供的数据格式来解析数据

在解析之前,必须要验证数据格式是否正确:https://www.sojson.com/

代码语言:javascript
代码运行次数:0
运行
复制
{
	"user": [{
			"name": "张三",
			"password": "123456"
		},
		{
			"name": "李四",
			"password": "123456"
		},
		{
			"name": "王五",
			"password": "123456"
		}
	]
}

第四步:将数据读取,并使用

代码语言:javascript
代码运行次数:0
运行
复制
QFile file("C:/Users/PC/Desktop/user.json");
    //读取JSON文件的数据 ----- QByteArray
    file.open(QIODevice::ReadOnly);
   QByteArray array =  file.readAll();
    qDebug() << array;
    // 将QByteArray转换成QJsonDocument
   // QJsonDocument
    //fromJson(const QByteArray &json, QJsonParseError *error = nullptr)
    QJsonDocument doc = QJsonDocument::fromJson(array);
    //根据JSON文件中的数据格式,来得到QJsonObject 或 QJsonArray

   QJsonObject object = doc.object();
    //根据数据格式和key-value来读取数据
      QJsonArray jsonArray =   object.value("user").toArray();

   for (int i=0;i<jsonArray.size();i++) {
         QJsonObject userObject =  jsonArray.at(i).toObject();
        qDebug() << userObject.value("name").toString();
        qDebug() << userObject.value("password").toString();
      }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 给应用程序设置菜单栏
  • 二、输入对话框(QInputDialog)
  • 三、QFile---- 文件类
  • 四 JSON数据格式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档