#include "personlistviewmodel.h"
PersonListViewModel::PersonListViewModel(SQLiteHelper *sqlhelper, QObject *parent)
{
Q_UNUSED(parent);
sqlHelper=sqlhelper;
//创建数据库
char *errmsg; //出错信息
const char *createPerson="create table IF NOT EXISTS Person("
"ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
"Name varchar(30) NOT NULL, "
"Age int NOT NULL"
");";
int res = sqlite3_exec(sqlHelper->sqldb, createPerson, NULL, NULL, &errmsg);
if(res!=SQLITE_OK)
{
qDebug()<<"创建Person表失败:"<<sqlite3_errcode(sqlHelper->sqldb)<<endl;
qDebug()<<"创建Person表失败:"<<sqlite3_errmsg(sqlHelper->sqldb)<<endl;
qDebug()<<"创建Person表失败:"<<errmsg;
sqlite3_free(errmsg);
}
personList=getAllPerson();
}
PersonListViewModel::~PersonListViewModel()
{
qDebug()<<"free person manage";
}
QVariant PersonListViewModel::data(const QModelIndex &index, int role) const
{
switch(role){
case DataRoles::IDRole : return personList[index.row()]->getID();
case DataRoles::AgeRole : return personList[index.row()]->getAge();
case DataRoles::NameRole : return personList[index.row()]->getName();
default : break ;
}
return QVariant();
}
QHash<int, QByteArray> PersonListViewModel::roleNames() const
{
QHash <int,QByteArray> temp ;
temp.insert(DataRoles :: IDRole,"id");
temp.insert(DataRoles :: AgeRole,"age");
temp.insert(DataRoles :: NameRole,"name");
return temp ;
}
int PersonListViewModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return personList.length();
}
bool PersonListViewModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
int row=index.row();
int col=index.column();
auto p=index.parent();
auto v=value.isValid();
if (!hasIndex(row,col, p) || !v)
return false;
Person *person = personList[index.row()];
if (role == DataRoles::NameRole)
{
person->setName(value.toString());
}
else if (role == DataRoles::AgeRole)
{
person->setAge(value.toString().toInt());
}
else
{
return false;
}
emit dataChanged(index, index, { role } );
return true ;
}
int PersonListViewModel::InsertPerson(Person *person)
{
char *errmsg;
QString insertPerson=QString("INSERT INTO Person(NAME,AGE) VALUES('%1', %2)").arg(person->getName()).arg(person->getAge());
int res=sqlite3_exec(sqlHelper->sqldb, insertPerson.toUtf8(), NULL, NULL, &errmsg);
if(res!=SQLITE_OK)
{
qDebug()<<sqlite3_errcode(sqlHelper->sqldb)<<endl;
qDebug()<<sqlite3_errmsg(sqlHelper->sqldb)<<endl;
qDebug()<<errmsg;
sqlite3_free(errmsg);
return -1;
}
else
{
char * zErrMsg = NULL; //错误信息指针的地址
char ** pResult = NULL; //用来指向sql执行结果的指针
int nrow = 0; //满足条件的记录数目
int ncolumn = 0; //每条记录包含的字段数据
QString selectPerson= "SELECT * FROM Person order by ID desc";
int result = sqlite3_get_table(sqlHelper->sqldb, selectPerson.toUtf8(), &pResult, &nrow, &ncolumn, &zErrMsg);
if(result==SQLITE_OK)
{
return sqlHelper->getIntValue(pResult,ncolumn,0,0);
}
else
{
return -1;
}
}
}
void PersonListViewModel::deletePerson(int id)
{
char *errmsg;
QString insertPerson=QString("DELETE FROM Person WHERE ID=%1").arg(id);
int res=sqlite3_exec(sqlHelper->sqldb, insertPerson.toUtf8(), NULL, NULL, &errmsg);
if(res!=SQLITE_OK)
{
qDebug()<<sqlite3_errcode(sqlHelper->sqldb)<<endl;
qDebug()<<sqlite3_errmsg(sqlHelper->sqldb)<<endl;
qDebug()<<errmsg;
sqlite3_free(errmsg);
}
qDebug()<<"delete updata";
}
void PersonListViewModel::updataPerson(int id, QString name, int age)
{
char *errmsg;
QString insertPerson=QString("UPDATE Person SET NAME = '%1',Age = %2 WHERE ID = %3").arg(name).arg(age).arg(id);
int res=sqlite3_exec(sqlHelper->sqldb, insertPerson.toUtf8(), NULL, NULL, &errmsg);
if(res!=SQLITE_OK)
{
qDebug()<<sqlite3_errcode(sqlHelper->sqldb)<<endl;
qDebug()<<sqlite3_errmsg(sqlHelper->sqldb)<<endl;
qDebug()<<errmsg;
sqlite3_free(errmsg);
}
else
{
if(personList.count()>0)
{
qDebug()<<"ID"<<id;
for(int i=0;i<personList.size();i++)
{
if(personList[i]->getID()==id)
{
if(personList[i]->getAge()!=age)
{
setData(this->index(i) ,age,DataRoles::AgeRole);
}
if(personList[i]->getName()!=name)
{
setData(this->index(i),name,DataRoles::NameRole);
}
//personList.replace(i,personList[i]); //beginRemoveRows(QModelIndex(),i,i);
//endRemoveRows();
break;
}
}
}
}
}
Person *PersonListViewModel::SelectPerson(int id)
{
char * zErrMsg = NULL; //错误信息指针的地址
char ** pResult = NULL; //用来指向sql执行结果的指针
int nrow = 0; //满足条件的记录数目
int ncolumn = 0; //每条记录包含的字段数据
QString selectPerson= QString("SELECT * FROM Person WHERE ID=%1").arg(id);
int result = sqlite3_get_table(sqlHelper->sqldb, selectPerson.toUtf8(), &pResult, &nrow, &ncolumn, &zErrMsg);
if(SQLITE_OK != result)
{
printf("执行sql语句失败\n");
return nullptr;
}
else
{
Person *person=new Person;
person->setID(sqlHelper->getIntValue(pResult,ncolumn,0,0));
person->setName(sqlHelper->getQStringValue(pResult,ncolumn,0,1));
person->setAge(sqlHelper->getIntValue(pResult,ncolumn,0,2));
sqlite3_free_table(pResult);
return person;
}
}
QList<Person *> PersonListViewModel::getAllPerson()
{
QList<Person*> persons;
char * zErrMsg = NULL; //错误信息指针的地址
char ** pResult = NULL; //用来指向sql执行结果的指针
int nrow = 0; //满足条件的记录数目
int ncolumn = 0; //每条记录包含的字段数据
QString selectPerson= QString("SELECT * FROM Person");
int result = sqlite3_get_table(sqlHelper->sqldb, selectPerson.toUtf8(), &pResult, &nrow, &ncolumn, &zErrMsg);
if(SQLITE_OK != result)
{
qDebug()<<"执行sql语句失败"<<endl;
}
else
{
for(int i=0;i<nrow;i++)
{
Person *person=new Person;
person->setID(sqlHelper->getIntValue(pResult,ncolumn,i,0));
person->setName(sqlHelper->getQStringValue(pResult,ncolumn,i,1));
person->setAge(sqlHelper->getIntValue(pResult,ncolumn,i,2));
persons.append(person);
}
sqlite3_free_table(pResult);
}
return persons;
}
void PersonListViewModel::addItem(QString name, int age)
{
Person *person=new Person(name,age);
auto count=InsertPerson(person);
qDebug()<<"count:"<<count;
person->setID(count);
beginInsertRows(QModelIndex(),rowCount(),rowCount());
personList.insert(personList.length(),person);
endInsertRows();
}
void PersonListViewModel::deleteItem(int id)
{
deletePerson(id);
if(personList.count()>0)
{
qDebug()<<"ID"<<id;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
QtSample.rar (76个子文件)
QtSample
serialporthelper.cpp 2KB
lib
sqlite3.lib 79KB
personlistviewmodel.cpp 8KB
Sqlite.qml 3KB
data
tcpserver.cpp 2KB
sqlite3.h 611KB
.git
index 2KB
HEAD 23B
refs
heads
master 41B
tags
remotes
origin
master 41B
COMMIT_EDITMSG 13B
objects
c1
c47378d399b2af355cfdfea5b25eae74e3baa6 79B
9b
4b90db9a06868e5c59a439e2a576888f264f2f 74B
e3
2cc4b066be7c13c07dfb9dd57d9786008b5177 120B
38
c588d784964aaa8751349ea69e8412c73d2b76 80B
72
6412cf5578436b39a4fada51340baf69bf2c64 91B
15
f24b435064f1908b171465b5bbd9223696a355 135B
48
effe20216f291fd7692622428ec27090534acc 197KB
95
9af1c6836db316268319f6318e695ca8740ff2 118B
70
694411f42aed908d3c5e7ca8ba6be514eba268 85B
23
6e41eeeddccd1d2a184ac108f0157f4c199a60 163B
a9
5c83d85eb993523e084c78ac540b7e33897fb6 167B
5f
6483ac33f1881cc59e080e69bb033ebe2a7829 77B
17
6010166806cc198ade83510aac9e581c1e397a 158B
96
a8ae4f5771e1ed409dbaa2ffc4afbcc2382791 67B
9c
36e13c5bfc938decd97e1b1eba471841e202c1 46B
pack
8f
e697fd9f028bbeb1c78a64a48fa1554597dd10 97B
87
9b4d147d3be34e402ff5f74eb3da81cad9ff57 612B
info
06
30ad84d3950316b8572e69dd7349c1fd5b5478 147B
b7
cf7307cab3e11f4bdcd5306de852ed12bac0ae 121B
d5
8f5cc408433ce7c50fb70d049df89c648661f1 164B
31
e83e9a3178df9d48e8cd877cfb5f208f04bdbf 172B
24
0d6753ca5a2b80b2ea1fb1cae1e70e478dcbbb 141B
fa
05b873676d49d9978ad91ba3cb2eafdf0a7a22 182B
db
abd1e9e4200231ec664ebcaed3163b1ec849a5 51B
8d3b83b3d87222e5d82e4c91688619ac3da57a 332B
description 73B
FETCH_HEAD 0B
info
exclude 240B
logs
HEAD 326B
refs
heads
master 166B
remotes
origin
master 150B
hooks
post-update.sample 189B
sendemail-validate.sample 2KB
prepare-commit-msg.sample 1KB
commit-msg.sample 896B
pre-receive.sample 544B
update.sample 4KB
pre-commit.sample 2KB
pre-rebase.sample 5KB
applypatch-msg.sample 478B
fsmonitor-watchman.sample 5KB
push-to-checkout.sample 3KB
pre-applypatch.sample 424B
pre-push.sample 1KB
pre-merge-commit.sample 416B
ORIG_HEAD 41B
config 345B
QtSample.pro.user 22KB
tcpserver.h 647B
main.cpp 1KB
qml.qrc 226B
tcpclient.h 851B
serialporthelper.h 647B
sqlite3.dll 1.08MB
person.h 484B
main.qml 1KB
person.cpp 539B
sqlitehelper.h 432B
MyInput.qml 447B
SerialPort.qml 4KB
sqlitehelper.cpp 2KB
Tcp.qml 8KB
QtSample.pro 1KB
personlistviewmodel.h 1KB
tcpclient.cpp 2KB
共 76 条
- 1
资源评论
dwm88888888
- 粉丝: 14
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功