网站的新闻模块怎么做,中铁三局招聘信息2023,wordpress 安卓适配,台州企业自助建站Qt编程指南 ■ SQLite■ CSV■ JSON ■ SQLite
Qt 提供了很多操作数据库的类#xff0c; SQLite 是非常小的#xff0c;是轻量级的#xff0c;完全配置时小于 400KiB#xff0c;省略可选功能配置时小于 250KiB。 SQLite 是一个进程内的库#xff0c;实现了自给自足的、无… Qt编程指南 ■ SQLite■ CSV■ JSON ■ SQLite
Qt 提供了很多操作数据库的类 SQLite 是非常小的是轻量级的完全配置时小于 400KiB省略可选功能配置时小于 250KiB。 SQLite 是一个进程内的库实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库这意味着与其他数据库不一样您不需要在系统中配置。就像其他数据库 SQLite 引擎不是一个独立的进程可以按应用程序需求进行静态或动态连接。 SQLite 可以直接访问其存储文件。
QSqlDatabase 类用于建立数据库的连接往往以指定加载的数据库驱动然后设置数据库的登录参数如主机地址用户名、登录密码等。这些都是服务器类型的数据库所需要做的操作 在 QSqlDatabase 连接数据库后用 QSqlTableModel 从数据库里读取出表格模型然后通过 Qt 的 QTableView 类显示数据库的内容在我们面前。
/*需要添加模块*/
QT sql/* 查看本机可用的数据库驱动 */
QStringList drivers QSqlDatabase::drivers();
foreach(QString driver, drivers) {qDebug()driver;
}/* 以QSQLITE驱动方式打开或者创建数据库 */
sqlDatabase QSqlDatabase::addDatabase(QSQLITE);
sqlDatabase.setDatabaseName(alarm.db);
/* 以open的方式打开alarm.db数据库则会创建一个alarm.db */
if (!sqlDatabase.open())qDebug()连接数据库错误sqlDatabase.lastError()endl;
elseqDebug()连接数据库成功endl;QSqlQuery query(sqlDatabase);/* 使用指令式创建表 */
query.exec(create table alarm (id int primary key, time vchar(15), flag vchar(5))); // primary 说明id不能为空
/* 以指令的方式插入数据 */
//query.exec(insert into alarm values(0, 06:00, false));model new QSqlTableModel(this, sqlDatabase);
/* 模型设置表的名字需要与数据库的表的名字相同 */
model-setTable(alarm);/* 如果有修改则同步修改到数据库* 注意这个规则需要与tabview这样的控件才生效* 因为tabview可以直接编辑表里的内容 */
model-setEditStrategy(QSqlTableModel::OnFieldChange);
/* 成功则返回true查看数据库里是否有alarm这个表格 */
model-select();/* 如果数据表数据为空则添加两个闹钟 */
if (model-rowCount() 0) {/* 插入一行 */model-insertRow(model-rowCount());/* 在该行插入数据 */model-setData(model-index(0, 0), 1);model-setData(model-index(0, 1), 06:00);model-setData(model-index(0, 2), false);/* 插入数据后记得提交 */model-submit();/* 再插入一行 */model-insertRow(model-rowCount());model-setData(model-index(1, 0), 2);model-setData(model-index(1, 1), 18:00);model-setData(model-index(1, 2), true);/* 提交 */model-submit();
}/* 打印出闹钟数据库里的信息 */
for (int i 0; i model-rowCount(); i) {for (int j 0; j 3; j) {QModelIndex qindex model-index(i, j);switch (j) {case 0:qDebug()第 model-data(qindex).toInt()行数据;break;case 1:listWidget-addItem(model-data(qindex).toString());qDebug()闹钟时间为 model-data(qindex).toString();break;case 2:qDebug()闹钟状态为 model-data(qindex).toString()endl;if (model-data(qindex).toString() ! true)listWidget-item(i)-setTextColor(QColor(22, 22, 22, 60));elselistWidget-item(i)-setTextColor(QColor(22, 22, 22, 225));break;default:break;}}
}/* 获取数据库里的闹钟开关状态 */
QModelIndex qindex model-index(i, 2);
bool sw model-data(qindex).toBool()/*设置数据库里的闹钟开关状态 */
QModelIndex qindex model-index(i, 2);
model-setData(qindex, true);■ CSV
逗号分隔值Comma-Separated ValuesCSV有时也称为字符分隔值因为分隔字符也可以不是逗号
■ JSON
QJsonValue
void remove(const QString key);
QJsonValue take(const QString key);
bool contains(const QString key) const;
void remove(QStringView key);
void remove(QLatin1String key);
QJsonValue take(QStringView key);
QJsonValue take(QLatin1String key);
bool contains(QStringView key) const;
bool contains(QLatin1String key) const;QJsonArray
删除数组 i
void removeAt(int i); //jArray.removeAt(0); //ok //删除第0项
QJsonValue takeAt(int i); //qDebug() jArray.takeAt(0).toInt() endl; //删除第0项并返回值
替换
QJsonArray jArray configJson-RootObj().value(IP).toArray();
jArray.insert(3,jArray); //ok
jArray.replace(3,jArray); //ok
jArray[4] 12; //无效 数组越界无效
jArray[0] 54; //ok
(*configJson-RootObjPointer())[IP]jArray; //获取指针方式修改“IP”
configJson-savejsonfile();
QJsonObject
是否包含
是否包含Student
QJsonObject objdoc.object();
if(obj.contains(Student))
{
}/*创建对象并转换成QByteArray*/
QJsonObject rootobj;
rootobj[sn] 20001;
rootobj[type] hub;
QJsonDocument jsonDoc(rootobj);
QByteArray bytejsonDoc.toJson(); //按照json风格生成字符串自动缩进有空格和\n \t ; 数据量大
QByteArray bytejsonDoc.toJson(QJsonDocument::Compact);//传入参数获取压缩后的序列化结果紧凑格式直接生成一堆字符串但是占用控件小/*QByteArray转换成QJsonDocument,并得到数据*/
QJsonDocument jsonDoc1 QJsonDocument::fromJson(byte); //QByteArray转换成文档对象
QJsonObject obj1 jsonDoc1.object();
qDebug() obj1 obj1[sn].toInt() obj1[type].toString() endl;插入
jsonObject.insert(name, QString::number(i1));
jsonObject.insert(age, i18);
jsonObject.insert(time, QDateTime::currentDateTime().toString());json说明
/*【】是用来填充数据使用 */
(*configJson-RootObjPointer())[IP]jArray;
/*.value 这种方式是用来获取数据*/
(*configJson-RootObjPointer()).value(IP)jArray;json注意事项
数组中不能是00 NightMode: [18, 00, 0, 6, 0, 0] //解析不出来
数组中是int类型的数据 不要用QString 去替换会不成功。
修改json类型要修改他的指针重新填充数据要重新赋值给上层的父类保存才能达到效果不能获取的只是临时变量。(如下例子)QJsonArray jArray configJson-RootObj().value(IP).toArray();
jArray[4] 12; //无效 数组越界
jArray.insert(3,jArray); //ok 可以插入任意类型
jArray.replace(3,jArray); //ok 可以替换任意类型
jArray[0] 54; //ok 数组不越界
(*configJson-RootObjPointer())[IP]jArray; //Ok 通过指针来获取“IP”并赋值
configJson-savejsonfile();案例1
QString fileName QCoreApplication::applicationDirPath();
fileName/pdoctor.json;
doctorjson new Json(fileName);
QJsonArray doctor doctorjson-Obj()[data].toArray();
int row doctor.count();
for (int i0;irow;i)
{
}
doctor.at(i).toObject()[advice].toObject()[adviceSeq].toInt();
doctor.at(i).toObject()[advice].toObject()[drugName].toString();
doctor.at(i).toObject()[advice].toObject()[adviceType].toInt();
doctor.at(i).toObject()[advice].toObject()[freq].toString();
doctor.at(i).toObject()[advice].toObject()[drugvolume].toDouble();
doctor.at(i).toObject()[advice].toObject()[drugDensity].toDouble();案例2
案例3
/*****************************************************************************************/
QByteArray byte;
QFile file(file_path);
if(file.exists()){file.open(QIODevice::ReadOnly|QIODevice::Text);bytefile.readAll();file.close();
}
else
{coutopenFileErrorendl;;
}
QJsonParseError json_error;
QJsonDocument jsonDoc(QJsondocument::fromJson(byte,json_error));
if(json_error.err!QJsonParseError::NoError)
{cout json error endl;
}
QJsonObject rootobjjsonDoc.object();
//一般需要使用 rootobj.contains(xxx) 判断一下是否存在 这里我们就默认是存在的 。QJsonObject A_objrootobj.value(A).toObject();
A_obj[AA]33;QJsonArray B_arrayrootobj.value(B).toArray();
QJsonObject B_SubobjB_array[0].toObject();
QJsonArray b_arrayB_Subobj.value(BB).toArray();
b_array.replace(0,BBB);
B_Subobj[BB]b_array;
B_array.replace(0,B_Subobj);QJsonObject C_objrootobj.value(C).toObject();
QJsonArray c_arrayC_obj.value(CC).toArray();
c_array.replace(0,CCC);
C_obj[CC]c_array;rootobj[A]A_obj;
rootobj[B]B_array;
rootobj[C]C_obj;QFile file(file_path);
if(file.exists()){file.open(QIODevice::WriteOnly|QIODevice::Text);jsonDoc.setObject(rootobj);file.seek(0);file.write(jsonDoc.toJson());file.flush();file.close();
}dock案例
#include json.h
Json::Json(QString fileName)
{jsonNamefileName;openjsonfile(jsonName);
}Json::~Json()
{savejsonfile();
}void Json::openjsonfile(QString name)
{if(QFile::exists(name)){QByteArray byte;QJsonDocument jsonDoc;QFile file;file.setFileName(name);file.open(QFile::ReadOnly|QIODevice::Text);byte file.readAll();jsonDoc QJsonDocument::fromJson(byte);//转换成文档对象if(jsonDoc.isObject()){ //判断文档对象中存储的数据是不是json对象isfile true;rootobj jsonDoc.object();//得到rootJson对象file.close();}}else{isfile false;}
}
void Json::savejsonfile()
{QFile file;QJsonDocument jsonDoc(rootobj); //将Json对象,转换成Json文档
// jsonDoc.setObject(rootobj);file.setFileName(jsonName);file.open(QFile::WriteOnly|QIODevice::Text);file.seek(0);file.write(jsonDoc.toJson());file.flush();file.close();
}int Json::getKeyIntVal(QString key)
{return rootobj[key].toInt();
}QString Json::getKeyStringVal(QString key)
{return rootobj[key].toString();
}bool Json::getKeyBoolVal(QString key)
{return rootobj[key].toBool();
}//读取空值(因其没有对应的to类型函数可使用下方类型接收或isNull()函数判断)
QVariant Json::getKeyVarialVal(QString key)
{return rootobj[key].toVariant();
}QJsonObject Json::getKeyQJsonObject(QString key)
{return rootobj[key].toObject();
}QJsonArray Json::getKeyQJsonArray(QString key)
{return rootobj[key].toArray();
}int Json::getArrayIndexIntVal(QString key, int index)
{return rootobj[key].toArray().at(index).toInt();
}QJsonObject Json::RootObj()
{return rootobj;
}QJsonObject* Json::RootObjPointer()
{return rootobj;
}bool Json::getisfile()
{return isfile;
}void Json::insertKeyIntVal(QString key, int valu)
{rootobj[key]valu;
}/*
*
*netjson-insertKeyBoolVal(NightMode,true); ok
*/
void Json::insertKeyBoolVal(QString key, bool valu)
{rootobj[key]valu;
}/*
*netjson-insertKeyStringVal(NightMode,opopopo); Ok
*/
void Json::insertKeyStringVal(QString key, QString valu)
{rootobj[key]valu;
}/*
* QJsonArray c_JsArr;
* c_JsArr.append(12);
* c_JsArr.append(32);
* netjson-insertKeyArrayVal(NightMode,c_JsArr); //Ok
*/
void Json::insertKeyArrayVal(QString key, QJsonArray array)
{rootobj[key] array;
}/*
* QJsonObject jsobject;jsobject[opo] qqqqqq;jsobject[op1] 12;jsobject[op2] true;jsobject[op3] rrrrrr;netjson-insertKeyObjectVal(NightMode,jsobject);
*
*/
void Json::insertKeyObjectVal(QString key, QJsonObject jsobject)
{rootobj[key]jsobject;
}/*
* netjson-replaceKeyArrayIndexVal(NightMode,5,10); //ok
**/
void Json::replaceKeyArrayIndexVal(QString key, int index, int valu) //valu 为 QString 不能替换
{QJsonArray c_JsArr rootobj.value(key).toArray();c_JsArr.replace(index,valu);rootobj[key]c_JsArr;
}/* 数组里面添加QJsonArray
* QJsonArray c_JsArr;
* c_JsArr.append(12);
* c_JsArr.append(32);
* c_JsArr.replace(0,24); //替换
* netjson-insertArrayKeyAddArrayVal(NightMode,0,c_JsArr);
*/void Json::insertArrayKeyAddArrayVal(QString key, int index, QJsonArray valu)
{QJsonArray c_JsArr rootobj.value(key).toArray();c_JsArr[index] valu;rootobj[key]c_JsArr;
}/*
* 数组里面添加QJsonObject
* QJsonObject jsobject;
* jsobject[opo] qqqqqq;
* jsobject[op1] 12;
* jsobject[op2] true;
* jsobject[op3] rrrrrr;
* netjson-insertArrayKeyAddObjectVal(NightMode,0,jsobject);
*/
void Json::insertArrayKeyAddObjectVal(QString key, int index, QJsonObject jsobject)
{QJsonArray c_JsArr rootobj.value(key).toArray();c_JsArr[index] jsobject;rootobj[key]c_JsArr;
}#ifndef JSON_H
#define JSON_H#include QtWidgets/QWidget
#include QJsonDocument
#include QJsonArray
#include QJsonObject
#include QJsonValue
#include QDebug
#include QString
#include QByteArray
#include QFileclass Json
{
public:Json(QString file);~Json();void openjsonfile(QString name);void savejsonfile();int getKeyIntVal(QString key);QString getKeyStringVal(QString key);bool getKeyBoolVal(QString key);QVariant getKeyVarialVal(QString key);QJsonArray getKeyQJsonArray(QString key);QJsonObject getKeyQJsonObject(QString key);int getArrayIndexIntVal(QString key, int index);QJsonObject RootObj();QJsonObject* RootObjPointer();bool getisfile();//将键值对添加到Json对象中void insertKeyIntVal(QString key,int valu);void insertKeyBoolVal(QString key,bool valu);void insertKeyStringVal(QString key,QString valu);void insertKeyArrayVal(QString key,QJsonArray array);void insertKeyObjectVal(QString key, QJsonObject jsobject);void replaceKeyArrayIndexVal(QString key, int index, int valu);void insertArrayKeyAddArrayVal(QString key, int index, QJsonArray valu);void insertArrayKeyAddObjectVal(QString key, int index, QJsonObject jsobject);
private:QString jsonName;QJsonObject rootobj;bool isfile ;
};#endif // JSON_H