QSqlTableModel|QSqlTableModel 类使用

QSqlTableModel类的主要函数

函数 功能描述
QSqlDatabasedatabase() 返回数据库的连接
voidsetTable(QString &tableName) 设置数据表的名称
QString tableName() 返回数据库名称
void setFilter(QString &filter) 设置过滤条件
void setSort(int column,Qt::SortOrder order) 设置排序字段和排序规则,调用select()才生效
void sort(int column,Qt::SortOrder order) 按列号和排序规则立即进行排序并获取数据
void setEditStrategy(EditStrategy strategy) 设置编辑策略
bool setHeaderData(int section,Qt::Orientation orientation,QVariant&value) 设置表头,设置字段显示名称
bool isDirty() 若有未更新到数据库的修改,返回true,否则false
int fieldIndex(QString &fieldName) 根据字段名称返回其在模型中的序号,不存在返回-1
QSqlIndex primaryKey() 数据表的主索引
int rowCount() 返回记录条数
bool select() 查询数据表的数据,并使用设置的排序和过滤规则
bool selectRow(int row) 刷新获取指定行号的记录
void clear() 清除数据模型,释放所有获取的数据
QSqlRecord record() 返回一条空记录,只有字段名,可用来获取字段信息
QSqlRecord record(int row) 返回行号的一条记录,包含记录数据
bool setRecord(int row,QSqlRecord&values) 更新一条记录的数据到数据模型,源和目标之间通过字段吗匹配,而不是按位置匹配
bool insertRecord(int row,QSqlRecord&record) 在行号row之前插入一条记录
boo insertRows(int row,int count) 在行号row之前插入count空行
bool removeRows(int row,int count) 从行号row开始删除count行,编辑策略为OnManualSubmit,需要调用submitAll()才从数据表里删除
void revertRow(int row) 取消行号row的修改,
void revertAll() 取消所有未提交的修改
bool submit() 提交当前行的修改到数据库
bool submitAll() 提交所有未更新的修改到数据库。
void QSqlTableModel::setSort(int column,Qt::SortOrder order)
第二个参数为枚举类型:Qt::AscendingOrder 表示升序Qt::DescendingOrder 表示降序
void QSqlTableModel::setEditStrategy(EditStrategy strategy)
参数为枚举类型:QSqlTableModel::OnFieldChange 字段值变化时立即更新到数据库
QSqlTableModel::OnRowChange 当前行变化时更新到数据库
【QSqlTableModel|QSqlTableModel 类使用】QSqlTableModel::OnManualSubmit所有修改暂时缓存,手动调用submitAll保存
QItemSectionModel 选择模型
QItemSectionModel * theSection = new QItemSectionModel(QSqlTableModel)
当用户在TableView上操作时,获取当前选择的行、列信息,并在选择的单元格变化时发出currentChanged()信号,当前行变化时,发射currentRowChanged()信号。
QSqlRecord 表示记录的类
QSqlRecordQSqlTableModel::record()返回只用字段定义没有数据
QSqlRecordQSqlTableModel::record(int row)返回行号row的记录,包括字段定义和数据
QSqlRecord 类的主要函数
函数原型 功能描述
void clear() 清除记录的所有字段定义和数据
void clearValues() 清除所有字段的数据,将数据内容置为null
bool contains(QSting &name) 记录是否包含名称为name的字段
bool isEmpty() 记录里没有字段返回true,否则false
int count() 记录的字段个数
QString fieldName(int index) 序号为index的字段名称
int indexOf(QString&name) 名称为name的字段序号,不存在返回-1
QSqlField field(QString&name) 返回字段名称为name 的字段对象
QVariant value(QString&name) 返回字段名称为name 的字段的值
void setValue(QString&name,QVariant&val) 设置字段名称为name 的值
bool isNull(QString&name) 字段名称为name 的数据是否为空
void setNull(QString&name) 设置字段名称为name 的字段值为空
QSqlField类
接口函数 功能描述
void clear() 清除西段数据,设为NULL,如果字段是只读的,不清除
bool isNull() 判断字段值是否为空
bool setReadOnly(bool readonly) 设字段为只读
QVariant value() 返回字段值
void setValue() 设置字段值
QDataWidgetMapper
QDataWidgetMapper用于建立界面组件与数据模型之间的映射,可以将界面的QLineEdit、QCombobox等组件与数据模型的一个字段关联起来。
创建QDataWidgetMapper变量后,用setModel()设置关联的数据模型,setSubmitPolicy()设置数据提交策略,AutoSubmit和ManualSubmit两种方式。
addMapping()用于设置界面组件与数据模型的列的映射,程序在界面上的各编辑组件与数据表的各字段之间建立了映射关系。
dataMapper->addMapping(ui.editName,table->fieldIndex("name"));

QDataWidgetMapper还有toFirst()、toPrevious()、toNext()、toLast()用于在记录间移动,
setCurrentIndex()和setCurrentModelIndex()可以直接移动到某一行记录

    推荐阅读