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