qt 5 数据库操作(mysql)
2015-11-04 19:25
579 查看
其实大家都知道,QT5以上的都自带了数据库驱动,所以呢,基本上可以直接使用,于是如果想知道怎么连接数据库,请参考这位大神写的。http://qtdebug.com/DB-AccessMySQL.html
关于数据库操作
QSqlDatabase db = QSqldatabase::addDataBase("QMYSQL"); //博主用的mysql
db.setHostName("127.0.0.1"); //本机地址
db.setDatabaseName("qt"); //我在mysql里面创建了一个叫qt的数据库
db.setUserName("root"); //账号
db.setPassword("59826****"); //密码
if(!db.open())
{
qDebug()<<"打开数据库失败";
}
qDebug()<<"连接成功";
关于数据库显示在表格中
QTableView *_view = new QTableView;
QSqlTableModel *_model = new QSqlTableModel;
QVBoxLayout *lay = new QVBoxLayout(this);
_model->setTable("user"); //数据库中的表格名称
_model->selection(); //选择表中所有的数据
_view->setModel(_model); //把_model传给_view
lay->addWidget(_view); //增加一个空间到QVBoxLayout并且显示
增删改查
void slotAddClicked()
{
_model->database().transaction(); //开始事物
QSqlRecord record = _model -> record(); // 用_model来获取记录(行)
_model -> insertRecord(-1,record); //增加到最后一行一个记录
}
void slotSubmitClicked()
{
if(_model->submitAll())
_model->database().commit(); //提交
else
{
_model->database().rollback(); //回滚
QMessageBox::critical(this,"Error",QSqldatabase().lastError.text());
}
}
void slotDelClicked()
{
QItemSelectionModel * selectModel=view->selectionModel(); //通过view来获取选中的部分数据model
QModelIndexList selectIndexList = selectModel->selectedIndexs(); // 通过selectModel来获取被选中的索引(index)
QList<int> delRow; //存储要删除的行
for(int i=0;i<selectIndexList.size(); ++i) // 遍历选择的列表
{
QModelIndex index = selectIndexList.at(i); //将列表转化为单个的Index
delRow << index.row(); // 将index对应的行加入delRow
}
while(delRow.size()>0)
{
int row = delRow.at(0);
delRow.removeAll(row); // 移除所有相同的行,去重
model->removeRow(row); // 移除该行
}
model->submitAll();
}
void slotFilter(QString filter)
{
QSqlRecord record = model -> record(); //获取所有记录
QString modelFilter; //总的筛选条件 xx like xx or xxx like xxx这种形式的字符串
if(filter.isEmpty)
{
model->setFilter(" ");
model->select();
return;
}
for(int i=0;i<record.count();++i)
{
if(i!=0)
{
modelFilter +="or";
}
QString field = record.field(i); // 将每行字段里面的内容都放进去
QString subFilter = QString().sprintf("%s like '%%%s%%'",field.toUtf8().data(),filter.toUtf8().data());
modelFilter +=subFilter
}
model ->setFilter(modelFilter); //过滤
model->select(); //刷新
}
作者 : Ten10
持续更新,未完待续
本文章属于作者原创,如需转载请注明 http://i.cnblogs.com/EditPosts.aspx?opt=1
关于数据库操作
QSqlDatabase db = QSqldatabase::addDataBase("QMYSQL"); //博主用的mysql
db.setHostName("127.0.0.1"); //本机地址
db.setDatabaseName("qt"); //我在mysql里面创建了一个叫qt的数据库
db.setUserName("root"); //账号
db.setPassword("59826****"); //密码
if(!db.open())
{
qDebug()<<"打开数据库失败";
}
qDebug()<<"连接成功";
关于数据库显示在表格中
QTableView *_view = new QTableView;
QSqlTableModel *_model = new QSqlTableModel;
QVBoxLayout *lay = new QVBoxLayout(this);
_model->setTable("user"); //数据库中的表格名称
_model->selection(); //选择表中所有的数据
_view->setModel(_model); //把_model传给_view
lay->addWidget(_view); //增加一个空间到QVBoxLayout并且显示
增删改查
void slotAddClicked()
{
_model->database().transaction(); //开始事物
QSqlRecord record = _model -> record(); // 用_model来获取记录(行)
_model -> insertRecord(-1,record); //增加到最后一行一个记录
}
void slotSubmitClicked()
{
if(_model->submitAll())
_model->database().commit(); //提交
else
{
_model->database().rollback(); //回滚
QMessageBox::critical(this,"Error",QSqldatabase().lastError.text());
}
}
void slotDelClicked()
{
QItemSelectionModel * selectModel=view->selectionModel(); //通过view来获取选中的部分数据model
QModelIndexList selectIndexList = selectModel->selectedIndexs(); // 通过selectModel来获取被选中的索引(index)
QList<int> delRow; //存储要删除的行
for(int i=0;i<selectIndexList.size(); ++i) // 遍历选择的列表
{
QModelIndex index = selectIndexList.at(i); //将列表转化为单个的Index
delRow << index.row(); // 将index对应的行加入delRow
}
while(delRow.size()>0)
{
int row = delRow.at(0);
delRow.removeAll(row); // 移除所有相同的行,去重
model->removeRow(row); // 移除该行
}
model->submitAll();
}
void slotFilter(QString filter)
{
QSqlRecord record = model -> record(); //获取所有记录
QString modelFilter; //总的筛选条件 xx like xx or xxx like xxx这种形式的字符串
if(filter.isEmpty)
{
model->setFilter(" ");
model->select();
return;
}
for(int i=0;i<record.count();++i)
{
if(i!=0)
{
modelFilter +="or";
}
QString field = record.field(i); // 将每行字段里面的内容都放进去
QString subFilter = QString().sprintf("%s like '%%%s%%'",field.toUtf8().data(),filter.toUtf8().data());
modelFilter +=subFilter
}
model ->setFilter(modelFilter); //过滤
model->select(); //刷新
}
作者 : Ten10
持续更新,未完待续
本文章属于作者原创,如需转载请注明 http://i.cnblogs.com/EditPosts.aspx?opt=1
相关文章推荐
- 我的QT5学习之路(一)——浅谈QT的安装和配置
- VS Qt,去掉烦人的红线提示
- Qt4.8.1学习笔记1—QTreeWidget控件的使用
- Qt 5 如何修改打包好的应用程序图标
- qt 5 小练习 纯代码制作自定义按钮
- qt 5 小练习 创建无边框界面
- Qt:qvbox.h”: No such file or directory
- Qt移植
- 谈谈QT分组布局
- QT处理中文之QString转为const char *
- Qt图形与图片
- Qt菜单\工具栏
- Qt TextEdit 使用
- QTP的退出函数
- 在ubuntu下使用Qt5.4连接mysql数据库出现错误
- Qt在线安装
- timerEvent()事件跟QTimer类之间的疑问
- 基于QML开发的二维码生成的QML插件
- QT pro文件介绍
- PyQt4(简单布局)