其实大家都知道,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