本文记录使用QSqlTableModel等组件实现单表的数据库操作。
QSqlTableModel是一个模型类,它的实例可以作为一个数据表的模型。使用QSqlTableModel模型和QTableView组件构成模型/视图结构,就可以实现数据表的数据显示和编辑。
目录
所需的类及定义
| 解释 | 类 |
| 数据库连接 | QSqlDatabase |
| 显示控件 | QTableView |
| Model视图 | QSqlTableModel |
| 选择Model | QItemSelectionModel |
| 字段编辑绑定 | QDataWidgetMapper |
| 自定义combox代理控件 | TComboBoxDelegate |
| 性别字符列表 | genderList |
| 部门字符列表 | deptList |
| 省份字符列表 | provinceList |
QSqlDatabase DB;
QSqlTableModel *tabModel;
QItemSelectionModel *selModel;
QDataWidgetMapper *dataMapper;//数据映射
TComboBoxDelegate delegateSex;
TComboBoxDelegate delegateDept;
QStringList genderList;
QStringList deptList;
QStringList provinceList;
表格控件设置QTableView
行背景交替颜色、单个单元格选择模式
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableView->setAlternatingRowColors(true);
打开数据库连接db.open()
打开SQLite数据库
bool SqlTableModelExample::openDataBase(QString aFile)
{
DB = QSqlDatabase::addDatabase("QSQLITE");//添加SQLite驱动
DB.setDatabaseName(aFile);//设置数据库名称
if(!DB.open())//打开数据库
{
QMessageBox::warning(this, "错误", "打开数据库失败");
return false;
}
else
{
openTable();
return true;
}
}
表设置初始化、表查询
设置表名
tabModel = new QSqlTableModel(this,DB);
tabModel->setTable("employee");
设置表排序字段
tabModel->setSort(tabModel->fieldIndex("empNo"),Qt::AscendingOrder);
打开表-查询
if(!tabModel->select())
{
//MessageBoxHelper::critical(this,"打开数据表错误,错误信息:\n"+tabModel->lastError().text());
QMessageBox::critical(this,"错误信息","打开数据表错误,错误信息:\n"+tabModel->lastError().text());
return;
}
显示行数
void SqlTableModelExample::showRecordCount()
{
ui->statusbar->showMessage(QString("记录条数:%1").arg(tabModel->rowCount()));
}
设置表格的水平字段标题
tabModel->setHeaderData(tabModel->fieldIndex("empNo"),Qt::Horizontal,"工号");
tabModel->setHeaderData(tabModel->fieldIndex("Name"),Qt::Horizontal,"姓名");
tabModel->setHeaderData(tabModel->fieldIndex("Gender"),Qt::Horizontal,"性别");
tabModel->setHeaderData(tabModel->fieldIndex("Birthday"),Qt::Horizontal,"出生日期");
tabModel->setHeaderData(tabModel->fieldIndex("Province"),Qt::Horizontal,"省份");
tabModel->setHeaderData(tabModel->fieldIndex("Department"),Qt::Horizontal,"部门");
tabModel->setHeaderData(tabModel->fieldIndex("Salary"),Qt::Horizontal,"薪水");
//不在列表tabView中显示
tabModel->setHeaderData(tabModel->fieldIndex("Memo"),Qt::Horizontal,"备注");
tabModel->setHeaderData(tabModel->fieldIndex("Photo"),Qt::Horiz

最低0.47元/天 解锁文章
551

被折叠的 条评论
为什么被折叠?



