QT界面设计并保存到文件(以JSON格式)
来源:互联网 发布:java怎么给字母排序 编辑:程序博客网 时间:2024/05/22 09:07
这两天写了关于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类型的对象这里总结一下一般在QT里面的设置类型都是在类型前面加.toxh_jsonobject.insert 这是对象的插入格式,前面的是对象后面的对象的值。其中的.toInt()是将文本转化成int类型的。
后面的.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,注意这里都是又返回值的,就是为了之后的使用。
阅读全文
0 0
- QT界面设计并保存到文件(以JSON格式)
- JSON格式串以CSV格式保存
- 递归提取目录下的所有json格式的文件,重命名,并保存到另外的目录
- qt 读取txt文件内容并保存到数组中
- 把配置文件以json字符串格式保存,并读取放到一个map中
- [Python] (多线程版本)抓取聚划算页面商品分析页面获取商品信息并以XML格式保存到本地
- 以日期格式处理xml文件到json格式的txt文件
- Qt把控件截图并保存到剪切板、保存到图片文件
- Android将图上以base64编码的格式上传到node.js服务器并保存
- C编写以二进制读取文件(任意格式eg :图片),保存到C语言数据格式的TXT文档
- C用OPENSSL计算文件的SHA1值,并以BASE64格式保存
- JAVA用OPENSSL计算文件的SHA1值,并以BASE64格式保存
- 用python读取json格式内容并保存到excel中
- 关于ext与springMVC中上传文件并以JSON格式返回入STORE的问题
- 例3:保存所有的Person对象到文件并以对象的方式读出来
- PLSQL解析JSON,并保存到数据库
- json中有格式的保存文件
- Python 以txt格式保存和读取json数据
- tslib移植出现的小问题
- Android自定义View(三)--可点击的节点进度条
- 如何掌握所有的程序语言
- Mybatis 输入映射和输出映射
- IPU相关知识(二)
- QT界面设计并保存到文件(以JSON格式)
- [日推荐]『初次见』这里有故事,还有诗和远方!
- spring中的拦截器
- zabbix3.4 监控tomcat多实例(二)
- 没有通过申硕考试怎么办?
- Android mvc,mvp , mvvm三种设计模式的选择实践
- Coursera deep learning 吴恩达 神经网络和深度学习 第四周 编程作业 Building your Deep Neural Network
- Servlet文件上传
- UE4场景太亮