关闭

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

165人阅读 评论(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,注意这里都是又返回值的,就是为了之后的使用。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

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

  • 2017-09-21 14:51
  • 27KB
  • 下载

Qt之JSON生成与解析

Qt之JSON生成与解析 转载▼ 标签: qt qjson qjsondocument qjsonobject qjsonarray 分类:Qt     JSON(JavaScript ObjectNotation)是一...
  • newyoung518
  • newyoung518
  • 2015-05-27 15:47
  • 2739

Qt之JSON生成与解析

简述Qt5 中包含了处理 JSON 的类,均以 QJson 开头(例如:QJsonDocument、QJsonArray、QJsonObject),在 QtCore 模块中,不需要额外引入其它模块。简述 常用的 JSON 库 JSON 常用类 简单的 JSON 对象 简单的 JSON 数组 复杂的 ...
  • u011012932
  • u011012932
  • 2016-10-09 18:58
  • 12878

QT使用QJson生成解析,简单的JSON,复杂的Json使用方法

本文是博主原创,转载时必须附上原本标题和连接
  • li491093957
  • li491093957
  • 2016-10-17 10:53
  • 4946

Qt JSON 文件生成与解析

最近需要在Qt中解析修改保存JSON格式的文件来完成相关工作,网友分享的这篇文章很实用,特此记录下来,方便自己下次查找。 简述 Qt5 中包含了处理 JSON 的类,均以 QJson 开头(例如:QJsonDocument、QJsonArray、QJsonObject),在 QtCore 模...
  • iamplane
  • iamplane
  • 2017-07-25 19:18
  • 712

Qt5 json文件"读"与"写"

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

Qt的纽带风格界面实现(最新的Office Ribbon风格)

Qt的纽带风格界面实现(最新的Office Ribbon风格)     之前有朋友已经做了360风格的自定义界面,非常棒,也帮助了不少开发的朋友。近期我也用Qt做了一些界面框架和风格方面的工作,主要是客户端软件采用的OfficeRibbion风格,给朋友们看一看多交流。...
  • sdust_dx
  • sdust_dx
  • 2017-12-13 16:03
  • 97

从头学Qt Quick(1) --体验快速构建动态效果界面

自2005年Qt4发布以来,Qt已经为成千上万的应用程序提供了框架服务,现在Qt已经基本上支持所有的开发平台了,这里面既包含了桌面、嵌入式领域,也包括了Android、IOS、WP等移动操作平台,甚至支持最新的Ubuntu Phone。 Qt Quick是一个UI技术组,Qt Quick本身主...
  • imxiangzi
  • imxiangzi
  • 2015-10-19 20:40
  • 1265

Qt模块化笔记之core——使用QJsonDocument输出JSON数据

上一节讲的都是如何将已有json文档中的数据取出利用。本节利用QJsonDocument,将其它类型的数据转化成json文档输出。 ———————————— 利用QJsonDocument的静态成员函数: QJsonDocument fromVariant(const QVariant & ...
  • xsjqqq123
  • xsjqqq123
  • 2014-02-10 15:26
  • 3569

Qt入门学习——Qt快速入门(vim纯代码编写)

original url: http://blog.csdn.net/tennysonsky/article/details/47981259 写代码前,先需搭建环境,详情请看:《Qt 5.4.2 ubuntu环境搭建》。 一个简单空白窗口 打开终端,...
  • junmuzi
  • junmuzi
  • 2015-11-25 13:02
  • 6039
    个人资料
    • 访问:325次
    • 积分:44
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档