东营网站备案代理公司,网站专题页面策划,凡科做网站行吗,wordpress数据都被存在哪里一、前提 --pro文件添加sql模块QT core gui sql二、使用
说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()list;连接 sqlite3 数据库
…一、前提 --pro文件添加sql模块QT core gui sql二、使用
说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()list;连接 sqlite3 数据库
声明 #include QSqlDatabaseQSqlDatabase db; //该类对象就相当于一个数据库实现 --通常放在构造函数中// 加载驱动db QSqlDatabase::addDatabase(QSQLITE); //QSQLITE驱动--连接的是sqlite3数据库//连接成功返回一个数据库对象// 设置数据库名db.setDatabaseName(company.db);//数据库文件后缀.db // 打开数据库 if(!db.open()) //open打开成功返回 true { qDebug()数据库打开失败db.lastError(); //lastError:返回有关数据库上发生的最后一个错误的信息。}执行 sql 语句 // 创建对象QSqlQuery query; //创建该对象是系统自动完成和数据库的关联// 定义一条创建表的sql语句QString createTable create table staffInformation (id integer, name varchar(20), age int) ;// 执行sql语句if(!query.exec(createTable)){qDebug() create table error: db.lastError();}// 插入数据QString insertData insert into staffInformation(id, name, age) values(1, chen, 18);// 执行sql语句if(!query.exec(insertData)){qDebug() insert data error: db.lastError();}// 查询数据QString selectData select * from staffInformation;// 执行sql语句if(!query.exec(selectData)){qDebug() select data error: db.lastError();}else{while (query.next()) {qDebug() query.value(id).toUInt()query.value(name).toString()query.value(age).toUInt();}}//删除数据QString deleteData delete from staffInformation where id 1;;// 执行sql语句if(!query.exec(deleteData)){qDebug() delete data error: db.lastError();}// 更新数据QString updateData update staffInformation set name yuan where id 1;;// 执行sql语句if(!query.exec(updateData)){qDebug() update data error: db.lastError();}使用 QSqlQueryModel 模型查询数据 QSqlQUeryModel 默认是只读数据模型 // 创建对象并设置表头信息QSqlQueryModel *model new QSqlQueryModel;// 执行sql语句model-setQuery(select * from staffInformation); //将查询的结果转换成model对象结果集// 根据需求设置表头信息model-setHeaderData(0, Qt::Horizontal, id);model-setHeaderData(1, Qt::Horizontal, name);model-setHeaderData(2, Qt::Horizontal, age);// 给ui控件设置模型QTableView *tableView new QTableView(this);tableView-setFixedSize(this-width(), this-height());//设置tableView大小tableView-setModel(model); //传入表格模型tableView-show(); //显示表格使用 QSqlQueryModel 模型修改数据
1创建一个类重写 QSqlQueryModel 虚函数
public://重写基类虚函数bool setData(const QModelIndex index, const QVariant value, int role Qt::EditRole); //修改数据库数据Qt::ItemFlags flags(const QModelIndex index) const; // 表格可编辑状态设置private://自定义函数接口void refresh();//更新数据bool setName(int useId, const QString name);//根据需求修改表中的数据//修改数据库数据
bool eidtQueryModel::setData(const QModelIndex index, const QVariant value, int role)
{//判断是否有效列if(index.column() 1 || index.column() 3)return false;//获取列对应的 idQModelIndex prinmaryIndex QSqlQueryModel::index(index.row(), 0);int id this-data(prinmaryIndex).toInt(); //获取表中字段的 id// 在修改行时将整个model清空this-clear();//根据需求修改对应的列bool ok false ;if(index.column() 1){ok setName(id, value.toString());}//刷新数据refresh();return ok;
}// 表格可编辑状态设置
Qt::ItemFlags eidtQueryModel::flags(const QModelIndex index) const
{// 获取原有单元格的编辑状态Qt::ItemFlags flag QSqlQueryModel::flags(index);// 给原有标志位增加一个可编辑的标志if(index.column() 1) //仅限第一列可编辑flag flag | Qt::ItemIsEditable; //给它设置一个可编辑的状态return flag;
}//更新数据
void eidtQueryModel::refresh()
{//相当于将数据库的数据查询出来转换成一个modelthis-setQuery(select * from staffInformation);this-setHeaderData(0, Qt::Horizontal, name); //设置表头
}//根据需求修改表中的数据
bool eidtQueryModel::setName(int useId, const QString name)
{//相当于一个刷新操作QSqlQuery query;query.prepare(update staffInformation set name ? where id ?);query.addBindValue(name);query.addBindValue(useId);return query.exec();
}2使用 // 创建模型对象eidtQueryModel *model new eidtQueryModel;//执行sqlmodel-setQuery(select id, name, age from staffInformation);//设置表头model-setHeaderData(0, Qt::Horizontal, id);model-setHeaderData(1, Qt::Horizontal, name);model-setHeaderData(2, Qt::Horizontal, age);//给ui控件设置模型QTableView *tableView new QTableView(this);tableView-setFixedSize(this-width(), this-height());//设置tableView大小tableView-setModel(model);// 传入表格模型tableView-show(); // 显示表格三、其他