QT界面设计并保存到文件(以JSON格式)

322人阅读 评论(0) 收藏 举报

这两天写了关于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保存与读取

简述许多游戏提供保存功能,使得玩家在游戏中的进度可以被保存,并在以后再玩的时候进行加载。保存游戏的过程通常涉及将每个游戏对象的成员变量序列化为文件。要实现这个功能,可以采取许多格式,其中之一就是 JS...
  • u011012932
  • u011012932
  • 2016-10-12 16:28:48
  • 6759

Qt之JSON生成与解析

简述Qt5 中包含了处理 JSON 的类,均以 QJson 开头(例如:QJsonDocument、QJsonArray、QJsonObject),在 QtCore 模块中,不需要额外引入其它模块。简...
  • u011012932
  • u011012932
  • 2016-10-09 18:58:44
  • 17834

Qt5 json文件"读"与"写"

Qt5对json的操作类有QJsonDocument、QJsonObject、QJsonArray、QJsonValue、QJsonParseError。还有一些辅助的功能类,如QVariantMap...
  • xzh_blue
  • xzh_blue
  • 2016-06-20 21:55:51
  • 2093

Qt之界面数据存储与获取

简述在GUI开发中,往往需要在界面中存储一些有用的数据,这些数据可以来配置文件、注册表、数据库、或者是server。无论来自哪里,这些数据对于用户来说都是至关重要的,它们在交互过程中大部分都会被用到,...
  • u011012932
  • u011012932
  • 2016-09-02 16:00:48
  • 13331

自学QT之创建json

在此之前有必要看看json的定义,不然会有些糊涂。json百度百科地址:http://baike.baidu.com/link?url=8dvCpRD3SWAljk42jMguD2LGi6c902QI...
  • xuancailinggan
  • xuancailinggan
  • 2016-01-10 20:50:12
  • 1140

Qt5笔记之Qt5插件的生成与加载及json文件的读取

一、前言 1. Qt Plugin按照应用场景分两种类型: (1)The High-Level API:用于扩展Qt本身的功能,需放在Qt安装目录下的指定目录里; (2)The Lower-Le...
  • u012043391
  • u012043391
  • 2017-09-29 09:30:41
  • 468

根据不同配置动态创建QT界面

  • 2017年09月21日 14:51
  • 27KB
  • 下载

Qt之保存/恢复窗口的几何形状

简述本节介绍如何使用geometry属性保存和恢复窗口的几何形状。在Windows中,基本上是存储QWindow::geometry()的结果,并在下次会话调用show()之前,调用QWindow::...
  • u011012932
  • u011012932
  • 2016-09-02 22:04:45
  • 4213

把json格式数据写入到本地文件

思路分析:1.使用File在指定位置创建出文件,如:e : / test1.json    2.获取数据的byte[]    3.使用输出流写入 第一步:创建文件 File file ...
  • LUNG108
  • LUNG108
  • 2017-06-14 15:52:43
  • 2783

将json格式的数据保存到本地

1.创建jsonobject对象JSONObject jsonObject = new JSONObject();2.以键值的形式存储数据jsonObject.put(key, value);3.将j...
  • a_sid
  • a_sid
  • 2017-03-09 18:37:25
  • 4147
    个人资料
    等级:
    访问量: 653
    积分: 57
    排名: 166万+
    文章分类
    文章存档