一、 给应用程序设置菜单栏
比如:
在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 ---- 输入信息提示 用户定义
后面的参数默认即可 - 返回值:单行输入的字符串信息
具体用法:
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()—>一次性读取所有的数据 |
按行来读取文件
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();
在读文件数据时,可能出现的情况:
读文件数据的方式:
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基本概念:
- JSON对象 ---- > 单个类型的数据,比如:int char string
- JSON数组 ----> 相当于一个数组,可以用来存放:int char ,类类型
在数据封装的格式中,
- 使用符号“
{ }
" 代表JSON对象 - 使用符号"
[ ]
"代表数组
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
中
在Qt中,解析JSON数据步骤:
- 第一步:将JSON文件转换成QJsonDocument对象,具体来讲,是将json文件中的数据转换成
json文档对象
QJsonDocument
fromJson(const QByteArray &json, QJsonParseError *error = nullptr)
功能:将QByteArray &json转换成QJsonDocument
参数说明:
- QByteArray &json ------- json数据,它可以从JSON文件中进行读取
- 第二步:从QJsonDocument对象中将JSON数据拿出来
对于QJsonDocument中,只有两个部分组成:QJsonArray和 QJsonObject
参数 | 用处 |
---|---|
QJsonObject | object() const |
功能:从QJsonDocument中得到一个QJsonObject
参数 | 用处 |
---|---|
QJsonArray | array() const |
功能:从QJsonDocument中得到一个QJsonArray
- 第三步: 要 根据提供的数据格式来解析数据
在解析之前,必须要验证数据格式是否正确:https://www.sojson.com/文章来源:https://www.toymoban.com/news/detail-651685.html
{
"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模板网!