QT界面设计并保存到文件(以JSON格式)
这两天写了关于QT的界面设计的东西,总之在大家的努力下搞好了。下面是一些主要的代码和思路
首先头文件就不讲了,要包含一大堆头文件,当然还有槽函数,因为我是在点击的时候才保存到文件中的。
下面只讲.cpp文件
ui(new Ui::xh_Dialog)
{
ui->setupUi(this);
// QJsonObject xh_jsonobject;
QRegExp regx("[0-9]+$");//只能输入1-9
QValidator *validator = new QRegExpValidator(regx);
this->ui->xh_lineEdit_1->setValidator( validator );
}
这是我的构造函数我是在构造函数里面写让只能输入数字的lineEdit让他只能输入1-9的数字,输入其他的不行,
setValidator表示设置验证程序,
QValidator 就是一个类库,译为验证器
fileName = QFileDialog::getOpenFileName(this,"OpenFile",QDir::currentPath());
this->ui->xh_lineEdit_4->setText(fileName);
这是获得图片的路径,然后把它设置到xh_lineEdit_4
QJsonObject xh_jsonobject;
xh_jsonobject.insert("ScnceName",ui->xh_lineEdit->text());
xh_jsonobject.insert("ScnceNum",ui->xh_lineEdit_1->text().toInt());
QStringList list = this->ui->xh_lineEdit_4->text().split("/");//分割字符串
QString xh_filename = list.at(list.size() - 1);
xh_jsonobject.insert("Bg_pic",xh_filename);
QJsonObject 创建的是JSON类型的对象
xh_jsonobject.insert 这是对象的插入格式,前面的是对象后面的对象的值。其中的.toInt()是将文本转化成int类型的。
这里总结一下一般在QT里面的设置类型都是在类型前面加.to
后面的.split表示的是分割字符串,这里是以“/”分割的,因为我是在Windows下写的所以这里是以“/”进行分割,要是你在Linux下面写的就是相反的,以"\"分割,后面我是想只获得图片的名字,他的路径我不获取,所以就是List.size() -1
这里我从网上找到了一个很好的解释
QString str = "a#b#c"; QStringList list =str.split("#");//查找#符号,然后分离存入list。list: [ "a", "b", "c" ]; QStringList flieName=list.at(0),//就是取刚才存入的队列的字符,list.at(0)就是a。- -! 这些看Qt的帮助文档都可以看- -
QJsonDocument xh_document;
xh_document.setObject(xh_jsonobject);
QByteArray xh_byte_arry = xh_document.toJson(QJsonDocument::Compact);
QString xh_json_str(xh_byte_arry);
这是生成QJSON的文档,然后把我的JSON对象插入进去,QbyteArray是进行深度拷贝,然后再将我拷贝的东西转化成Qstring类型的(也就是字符串类型的),放在xh_json_strz里面,(这里因为是菜鸟所以起名就没有很大的注意。见谅见谅)
QDir dir(QDir::currentPath()+"/UI/background/");
dir.mkpath(QDir::currentPath()+"/UI/background/");//创建多级目录
QFile file("./UI/background/"+xh_filename);
QDir是创建多级目录QDir::currentPath()表示的是当前的目录,然后再当前的目录下创建我命名的文件名,注意这里是多级的,Qfile是单级的我这里是想用我上面截取的图片的名字来进行命名我所需要的文件
QFile::copy(this->ui->xh_lineEdit_4->text(),QDir::currentPath()+"/UI/background/"+xh_filename);
这里是将我获得的图片的路径(因为我是将他显示在xh_lineEdit_4上面了)拷贝到我之前命名的文件中去
file.setFileName("./UI/scene/scene.dat");
bool ok=file.open(QIODevice::WriteOnly|QIODevice::Append);
QFile::copy(this->ui->xh_lineEdit_4->text(),QDir::currentPath()+"/UI/scene/"+xh_filename);
if(ok)
{
QTextStream out(&file);
out<<xh_json_str<<endl;
out<<xh_byte_arry_1<<endl;
file.close();
}
这里我有创建了一个文件,是为了存储我的数据,然后用bool z类型额OK判断有没有打开成功,这里注意QIODecice::writeOnly|QIODevice::Append,是每次只写文件中的的一行,因为智力有一个append所以之前的写的数据是不会被覆盖的,然后再将之前写的图片也放到我现在的文件夹里面,如果成功,QTextStream out是写入这个文件,相反QtextStresm in就是读出,这里概念可能与我们平常理解的相反,但是没事,并不妨碍我们去用他,然后将我之前创建的并且已经插入好的QJSON类型的对象写入到里面,再将文件关闭。
int ret = QMessageBox::information(this,"information","是否保存",QMessageBox::Yes|QMessageBox:: No);
if(ret == QMessageBox::Yes)
{
clear();
}
这里我用QmessageBox提示是否保存,如果是Yes就将之前界面写的东西clear()掉,这里我的clear()也是一个函数。
void xh_Dialog::clear()
{
this->ui->xh_lineEdit->clear();
this->ui->xh_lineEdit_1->clear();
this->ui->xh_lineEdit2->clear();
this->ui->xh_lineEdit3->clear();
this->ui->xh_lineEdit_4->clear();
}
这里我有写了一个函数,是为了实现有些东西每填的话是不能保存的
bool xh_Dialog::isNULL()
{
if(this->ui->xh_lineEdit->text().isEmpty())
{
QMessageBox::warning(this,"警告","场景名称不能为空");
return false;
}else if(this->ui->xh_lineEdit_1->text().isEmpty())
{
QMessageBox::warning(this,"警告","场景号不能为空");
return false;
}
else
{
return true;
}
}
我用的都是Qmessage,注意这里都是又返回值的,就是为了之后的使用。
QT界面设计并保存到文件(以JSON格式)相关推荐
- Qt文件编码转换工具(三) Qt界面设计
目录 下载链接 上一节为C++判断文件编码 本节为Qt界面设计 下载链接 Realase打包版本下载: Qt文本转化工具 realase版本 https://download.csdn.net/dow ...
- Qt + Python + OpenCV图标替换工具 之 Qt界面设计(四)
目录 上一篇博文 程序的下载地址以及源码 Qt界面设计 上一篇博文 Qt + Python + OpenCV图标替换工具 之 Python调用dll(三) https://blog.csdn.net/ ...
- 基于人脸识别的课堂签到管理系统(一)---环境设置以及简单的QT界面设计
基于人脸识别的课堂签到管理系统(一)---环境设置以及简单的QT界面设计 一.前言 二.Pycharm安装与环境配置 2.1 Pycharm安装配置 2.2 Pycharm环境配置 三.QT界面设计 ...
- QT界面设计添加BUTTON不显示
在QT界面设计中常常出现button不显示的问题,此时只需要打开工程文件夹,找到里面的ui_xxx.h文件,备份好之后删除此文件,接着执行清理工程,执行qmake,rebuild工程的操作,就可以了!
- 一文读懂qt界面设计(分裂器,布局,拉伸,各种属性设置)
可以先看看我这个文章:qt关于界面设计中的一些知识总结_我是标同学的博客-CSDN博客_qt 水平伸展 现在我们来正式开始讲解. 布局种类 qt中能称为布局管理器的有如下6个: 水平布局(QHBoxL ...
- Qt简单编程--数组保存到文件
对于需要操作下位机的情况,往往需要保存二进制数据到文件.一般的做法是读数据到数组缓冲,再把数组的数据保存到文件. 保存数组到文件,很简单. QFile f("flash_data.bin&q ...
- Vs + Qt 界面设计常用函数合集
下面主要介绍一些在进行 Qt 界面设计时 SetWindows.. 开头的一些常见函数!!! 持续更新中...... 1.setWindowContextHelpld 2.setWindowDisp ...
- java发送post请求json格式_Linux QT 4G发送HTTP POST请求发送JSON格式的数据
一.在PC Window(QT5版本) 1.1.构建URL 1.2.构建HTTP请求头 1.3.连接信号与操作,接收服务器回复的消息 槽函数这里我们要在头文件定义,然后把处理过程实现. void Ma ...
- 大四课程设计之基于RFID技术的考勤管理系统(四)Qt界面设计
---------------------------------------------------------------------------------------- 源码下载地址: htt ...
最新文章
- 【shell】创建长目录,目录存在则忽略,缺失则创建
- plsql执行command命令控制台出现乱码_设计模式系列 — 命令模式
- Python高效画饼图
- 使用python和树莓派实现远程监控
- python去重复功能_消除Python列表重复的几种方法,python,去,一些
- css 做幻灯片效果
- 原生js设置div隐藏或者显示_10种JS控制DIV的显示隐藏代码
- Python笔记-U2解锁手机九宫格
- 需要注意的一些Mysql语句
- 5分钟商学院-个人篇-谈判能力
- vue-router—12全局钩子函数
- CTF练习-小游戏解密俄罗斯方块
- 双11临近,电脑无缘无故的弹出了双11天猫广告,必须追踪到底
- 在kindle上阅读网络小说的正确方法——Kindle网文助手
- 成为IT精英,我奋斗7年(震撼!正能量 转)
- 买天猫网店转让成为电商创业新趋势
- 【笔记】Polygon mesh processing读书笔记(5)
- java thread dump
- 数仓架构实践3:苏宁售后体系四层模型架构
- 汉诺塔问题的解决思想