当前位置: 首页 > news >正文

找券网站怎么做毕业室内设计代做网站

找券网站怎么做,毕业室内设计代做网站,免费s站推广网站,莆田网站建站建设【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了ini文件的解析办法,通过QSettings类就可以很轻松地访问ini文件里面的数据。除了ini文件之外,另外一种经常出…

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们学习了ini文件的解析办法,通过QSettings类就可以很轻松地访问ini文件里面的数据。除了ini文件之外,另外一种经常出现的文件格式其实是json格式。一般来说,如果读写的数据不是很多,那么完全可以用json文件替换成数据库,实现数据的保存和加载工作。今天,我们通过编写一个会员管理软件的办法,正好学习下qt下面如何进行json数据的处理。当然,还可以借助这个小项目,多了解一下qt下面不同控件的用法和写法。

1、设计界面

        如果界面上的控件比较少,可以直接用c++语言编写,没有问题。但是如果控件比较多的话,那么建议还是用designer来进行设计。本次编写的会员管理软件,控件的数量稍微有点多,正好可以借这个机会把designer练一练。

        练习的过程当中,我们也发现,部分控件存在着排列层次的关系。比如左侧的operation,如果是后面加上去的,没有把它放到单选框、标签、输入框的最下面,那么生成窗口之后,其实不管是radioButton、还是textBox,都是没有办法进行输入的。这一点可能需要稍微注意下。另外,整个界面是删除菜单栏、工具栏和状态栏的。

2、QtWidgetsApplication.h头文件

        头文件中需要注意的部分,主要就是各个控件的回调函数。这里面有radioButton的回调函数、按钮的回调函数。其中radioButton虽然是4个,但是可以看成是一组,这样可以少写3个回调函数,编写上面比较方便一点。当然,除了界面之外,关联的业务数据也要根据实际情况及时添加上。

#pragma once#include <string>
#include <vector>
using namespace std;#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication.h"class QtWidgetsApplication : public QMainWindow
{Q_OBJECTpublic:QtWidgetsApplication(QWidget *parent = nullptr);~QtWidgetsApplication();private:Ui::QtWidgetsApplicationClass ui;int mode_;int max_number_;vector<int> id_array_;vector<string> name_array_;private:int findDataById(int id);void updateData();void loadFile();private:void onRadioButtonToggled(bool checked);void onOkClicked();void onCancelClicked();void onSaveClicked();};

3、QtWidgetsApplication.cpp文件设计

        到目前为止,这个cpp文件算得上是目前qt项目代码行数最多的文件,主要也是因为功能要求比较多。首先,它包含了基本的构造函数和析构函数。构造函数里面最主要的部分,就是把控件和它的回调函数关联在一起。其次,代码中涉及到json数据的加载和保存。和c# wpf不同,qt本身有相关的类来处理这些数据。最后,就是业务逻辑。业务逻辑一般比较复杂、麻烦一点,编写之前最好想清楚,比如插入数据的时候是不是需要检查一下是不是有同名id,删除的时候是不是考虑存在找不到的情况。crud的处理方式虽然比较简单,但是涉及到业务层面,还是要想清楚、搞明白,中间出错都没有关系,但是可以通过这个crud来提高自己的业务分析能力,也是不错的一种方式。

        另外,因为测试的时候涉及到了data.json文件,这部分大家可以先参考这个模板。将来使用的话,可以在这个模板之上进一步去拓展和延申,

{"count": 6,"items": [{"ID": 1,"NAME": "abcde"},{"ID": 2,"NAME": "bbb"},{"ID": 3,"NAME": "ccc"},{"ID": 5,"NAME": "ddd"},{"ID": 6,"NAME": "eee"},{"ID": 4,"NAME": "fff"}]
}

        和ini文件一样,这个json文件也需要保存在h文件、cpp文件目录下面。最后,还是给出完整的cpp代码,虽然内容多了一点,但还是比较有借鉴意义的,可以耐心地去看一看、分析下。

#include <QDebug>
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
#include <QMessageBox>
#include "QtWidgetsApplication.h"QtWidgetsApplication::QtWidgetsApplication(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);mode_ = 1; // addmax_number_ = 100; // maximum number is 100ui.radioButton1->setChecked(true); // first radio button is checked right nowloadFile(); // load data from json fileconnect(ui.radioButton1, &QRadioButton::toggled, this, &QtWidgetsApplication::onRadioButtonToggled);connect(ui.radioButton2, &QRadioButton::toggled, this, &QtWidgetsApplication::onRadioButtonToggled);connect(ui.radioButton3, &QRadioButton::toggled, this, &QtWidgetsApplication::onRadioButtonToggled);connect(ui.radioButton4, &QRadioButton::toggled, this, &QtWidgetsApplication::onRadioButtonToggled);connect(ui.pushButton1, &QPushButton::clicked, this, &QtWidgetsApplication::onOkClicked);connect(ui.pushButton2, &QPushButton::clicked, this, &QtWidgetsApplication::onCancelClicked);connect(ui.pushButton3, &QPushButton::clicked, this, &QtWidgetsApplication::onSaveClicked);updateData();
}QtWidgetsApplication::~QtWidgetsApplication()
{}void QtWidgetsApplication::onRadioButtonToggled(bool checked) 
{if (checked) {if (sender() == ui.radioButton1){mode_ = 1;ui.lineEdit2->setEnabled(true);}else if (sender() == ui.radioButton2){mode_ = 2;ui.lineEdit2->setEnabled(false);}else if (sender() == ui.radioButton3){mode_ = 3;ui.lineEdit2->setEnabled(true);}else if (sender() == ui.radioButton4){mode_ = 4;ui.lineEdit2->setEnabled(false);}else{qDebug() << "Unknown option was selected";}}
}void QtWidgetsApplication::onOkClicked()
{int id;string name;int pos;bool conversionOK;switch (mode_){case 1: //addif (ui.lineEdit1->text() == ""){QMessageBox::information(nullptr, "Tips", "Id is empty!");return;}if (ui.lineEdit2->text() == ""){QMessageBox::information(nullptr, "Tips", "Name is empty!");return;}if (id_array_.size() >= max_number_){QMessageBox::information(nullptr, "Tips", "Buffer is full!");return;}id = ui.lineEdit1->text().toInt(&conversionOK);if (findDataById(id) != -1){QMessageBox::information(nullptr, "Tips", "Id already existed!");return;}name = ui.lineEdit2->text().toStdString();id_array_.push_back(id);name_array_.push_back(name);QMessageBox::information(nullptr, "Tips", "Successfully add data!");updateData();ui.lineEdit1->setText("");ui.lineEdit2->setText("");break;case 2://delif (ui.lineEdit1->text() == ""){QMessageBox::information(nullptr, "Tips", "Id is empty!");return;}id = ui.lineEdit1->text().toInt(&conversionOK);pos = findDataById(id);if(pos == -1){QMessageBox::information(nullptr, "Tips", "Specified Id does not existed!");return;}id_array_.erase(id_array_.begin() + pos);name_array_.erase(name_array_.begin() + pos);QMessageBox::information(nullptr, "Tips", "Successfully del data!");updateData();ui.lineEdit1->setText("");ui.lineEdit2->setText("");break;case 3:// updateif (ui.lineEdit1->text() == ""){QMessageBox::information(nullptr, "Tips", "Id is empty!");return;}if (ui.lineEdit2->text() == ""){QMessageBox::information(nullptr, "Tips", "Name is empty!");return;}id = ui.lineEdit1->text().toInt(&conversionOK);pos = findDataById(id);if(pos == -1){QMessageBox::information(nullptr, "Tips", "Specified Id does not existed!");return;}name = ui.lineEdit2->text().toStdString();name_array_[pos] = name;QMessageBox::information(nullptr, "Tips", "Successfully update data!");updateData();ui.lineEdit1->setText("");ui.lineEdit2->setText("");break;case 4: // searchif (ui.lineEdit1->text() == ""){QMessageBox::information(nullptr, "Tips", "Id is empty!");return;}id = ui.lineEdit1->text().toInt(&conversionOK);pos = findDataById(id);if (pos == -1){QMessageBox::information(nullptr, "Tips", "Specified Id does not existed!");return;}name = name_array_[pos];ui.lineEdit1->setText("");ui.lineEdit2->setText("");QMessageBox::information(nullptr, "Tips", QString::fromStdString(string("Name is ") + name + string("!")));break;default:break;}
}void QtWidgetsApplication::onCancelClicked()
{this->close();
}void QtWidgetsApplication::onSaveClicked()
{QJsonArray itemsArray;// save data to itemsArrayfor (int i = 0; i < id_array_.size(); i++) {QJsonObject itemObject;itemObject["ID"] = id_array_[i];itemObject["NAME"] = QString::fromStdString(name_array_[i]);itemsArray.append(itemObject);}// create jsonObjectQJsonObject jsonObject;jsonObject["count"] = itemsArray.size();jsonObject["items"] = itemsArray;// transfer to jsonDocuentQJsonDocument jsonDocument(jsonObject);// save to json fileQFile file("data.json");if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {file.write(jsonDocument.toJson());file.close();QMessageBox::information(nullptr, "Tips", "Successfully save the json file!");}else {qDebug() << "Failed to save JSON file";}
}void QtWidgetsApplication::loadFile()
{QFile file("data.json");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {qDebug() << "Failed to open JSON file";return;}QByteArray jsonData = file.readAll();file.close();QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonData);if (jsonDocument.isNull()) {qDebug() << "Failed to create JSON document";return;}QJsonObject jsonObject = jsonDocument.object();int num = jsonObject["count"].toInt();// get itemsQJsonArray itemsArray = jsonObject["items"].toArray();// read data from itemsfor (int i = 0; i < itemsArray.size(); ++i) {QJsonValue itemValue = itemsArray.at(i);if (itemValue.isObject()) {QJsonObject itemObject = itemValue.toObject();// read dataint id = itemObject["ID"].toInt();QString name = itemObject["NAME"].toString();id_array_.push_back(id);name_array_.push_back(name.toStdString());}}
}int QtWidgetsApplication::findDataById(int id)
{int i;for (i = 0; i < id_array_.size(); i++){if (id_array_[i] == id){return i;}}return -1;
}void QtWidgetsApplication::updateData()
{string s = "";int i;for (i = 0; i < id_array_.size(); i++){s += std::to_string(id_array_[i]);s += " ";s += name_array_[i];s += "\n";}ui.textEdit1->setPlainText("");ui.textEdit1->setPlainText(QString::fromStdString(s));}

4、测试和验证

        相比较而言,测试和验证就容易得多。首先,加载的时候,看看json数据有没有全部加载到界界面里面。其次,看下增删改查的功能是否正常。如果一切都没有问题,那就基本ok了。有问题的话,单步去调试即可。

http://www.sczhlp.com/news/93326/

相关文章:

  • 公司页面网站设计模板无锡高端网站建设咨询
  • 清远做网站的有哪些搜索引擎优化实训报告
  • o2o家电维修网站开发手机端网站怎么做的
  • 音乐网站设计沈阳企业免费建站
  • 怎么用电脑给域名做网站小程序开发合同
  • 做兼职网站有哪些吴桥网站建设
  • vip视频网站怎么做做餐饮加盟的网站建设
  • Server 13 ,CentOS 上使用 Nginx 部署多个前端项目完整指南( 协助多端口与脚本自动化 )
  • 洛谷P2490 [SDOI2011] 黑白棋
  • WGCLOUD的告警日志在哪儿存贮的?
  • 传统软件部署的痛点
  • HarmonyOS 5分布式数据管理初探:实现跨设备数据同步
  • 笑话网站源码下载手机上怎么上传网站吗
  • 网站绑定多个域名建设局官网查询系统
  • 手机网站环境响应式html5网页模板
  • 开发建设网站多久山东做网站的
  • 做网站大型wordpress主题带商城
  • 音乐网站开发模板可信网站认证收费吗
  • 电商网站设计工作内容百度公司可以做网站么
  • 怎么做查询网站深圳全网推广公司
  • 中国建设银官方网站企业邮箱入口
  • 西安建设商城类网站中国电子系统建设三公司网站
  • 网站设计权限太原网站域名搭建
  • drupal7建站教程面试简历模板免费
  • 海外服务器租用多少钱一年seo站长之家
  • Docker 容器化
  • phpmyadmin漏洞利用
  • CF19E Fairy
  • Wireshark 学习笔记(二)
  • 怎样弄网站自己给公司做网站难不难