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

这篇具有很好参考价值的文章主要介绍了05应用程序设计和文件操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

比如:

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

第二步:在UI设计师,修改文本内容和其他设置
05应用程序设计和文件操作,QT,qt

进行设置
05应用程序设计和文件操作,QT,qt

设置的效果图如下:
05应用程序设计和文件操作,QT,qt

给菜单选项,增加图片资源
05应用程序设计和文件操作,QT,qt

二、输入对话框(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 ---- 输入信息提示 用户定义
    后面的参数默认即可
  • 返回值:单行输入的字符串信息
    具体用法:
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
05应用程序设计和文件操作,QT,qt

在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()—>一次性读取所有的数据

按行来读取文件

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)

打开文件接口函数

bool QFile::open(QIODevice::OpenMode mode)

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

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

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

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

    //[1]打开一个文件
    QFile file("./text.txt"); //当前路径下的txt文件,如果该文件不存在,那么自动创建

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

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

file.close();

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

在读文件数据时,可能出现的情况:
05应用程序设计和文件操作,QT,qt

读文件数据的方式:

 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数据格式:

{  ---- 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
05应用程序设计和文件操作,QT,qt

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

  1. 第一步:将JSON文件转换成QJsonDocument对象,具体来讲,是将json文件中的数据转换成
    json文档对象
       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/

{
	"user": [{
			"name": "张三",
			"password": "123456"
		},
		{
			"name": "李四",
			"password": "123456"
		},
		{
			"name": "王五",
			"password": "123456"
		}
	]
}

第四步:将数据读取,并使用文章来源地址https://www.toymoban.com/news/detail-651685.html

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

到了这里,关于05应用程序设计和文件操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT踩坑之子线程不能操作UI,否则应用程序卡死

    QT易踩坑之在子线程中操作UI,造成应用程序卡死! 这里调用SDKGetMemberInfo()接口可能是个耗时操作,因此我们使用 QtConcurrent启动一个线程 来执行该函数,若返回值为0,则主界面弹出提示语\\\"Examples of briquette elves\\\"(如何弹出提示语就是另一个故事了,这里我们不过多关注,但重

    2024年02月06日
    浏览(90)
  • Qt中的配置文件:实现个性化应用程序配置与保存加载

    在现代软件开发中,用户对于应用程序的个性化配置和设置变得越来越重要。为了满足用户需求并提供更好的用户体验,开发人员常常需要实现一种机制,以便在每次启动应用程序时能够记住用户上次的配置。这样用户就可以方便地恢复到他们熟悉的环境,无需重新进行所有

    2024年02月11日
    浏览(54)
  • 06-3_Qt 5.9 C++开发指南_多窗体应用程序的设计(主要的窗体类及其用途;窗体类重要特性设置;多窗口应用程序设计)

    常用的窗体基类是QWidget、QDialog 和QMainWindow,在创建 GUI应用程序时选择窗体基类就是从这 3 个类中选择。QWidget 直接继承于 QObject,是 QDialog 和 QMainWindow 的父类,其他继承于 QWidget 的窗体类还有 QSplashScreen、QMdiSubWindow和QDesktopWidget。另外还有一个类QWindow,它同时从 QObject 和Q

    2024年02月13日
    浏览(86)
  • <QT开发> QT开发工具-之-QT应用程序打包

    <QT开发> QT开发工具-之-QT应用程序打包 笔者为什么会写这篇文章呢?这是因为,笔者使用windows QT开发了一个测试工具。目的是通过TCP/IP测试其它应用程序。首先这个QT程序是笔者自己开发的,所以笔者的电脑当然是可以运行这个QT程序的,但是想要这个QT程序在其它同事的

    2024年02月12日
    浏览(152)
  • 《Qt开发》MDI应用程序

    实现多个子窗体的自定义布局(自定义子窗体尺寸和位置)、平铺布局(titleSubWindows)和分页模式(QMdi::TabbedView)。 运行效果图 初始布局(自定义布局) 平铺布局 多页模式 实现过程 1. 创建项目MdiFirstDemo,并创建3个子窗体,分别为FirstSubWindow、SecondSubWindow和ThirdSubWindow。

    2024年01月16日
    浏览(51)
  • Qt 实现应用程序单实例

    目前使 Qt 运行一个实例有如下几种方式: 1.QSharedMemory 使用共享内存,当第二个进程启动时,判断内存区数据是否建立,如有,则退出;这种方式有弊端,在程序发生崩溃时,未及时清除共享区数据,导致程序不能正常启动。 2.文件锁 在程序运行的时候就在目录下创建一个文

    2024年02月10日
    浏览(44)
  • Qt应用程序中的 QApplication

    QApplication类是一个Qt框架中核心的应用程序类,它提供了管理应用程序的框架、事件循环和系统级配置的基础。在本文中,我们将详细介绍QApplication类的功能和应用场景。 通常,我们在主函数中创建 QApplication 对象。在创建时,我们可以指定一些命令行选项和特定于平台的参

    2024年02月15日
    浏览(39)
  • 「Qt中文教程指南」如何创建基于Qt Widget的应用程序(四)

    Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文描述了如何使用Qt Creator创建一个小的Qt应用程序

    2024年02月06日
    浏览(58)
  • 基于Qt HTTP应用程序项目案例

    main函数创建对象空间,确认窗口的大小和坐标。

    2024年02月07日
    浏览(39)
  • Qt Linux 环境中应用程序打包

    系统环境:Ubuntu20.04LTS 开发环境:Qt5.14.1 在进入程序部署打包之前,阅读官方的部署文档Deploy,通常情况下,我们在开发的时候,Qt Creator 的左下角构建模式为Debug,便于我们调试编写程序。Qt的三个构建模式Debug、Profile、Release的区别是: debug可以调试程序,而release不可以。在

    2024年02月01日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包