QSqlTableModel类的主要函数
函数 | 功能描述 |
---|---|
QSqlDatabase database() | 返回数据库的连接 |
void setTable(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::OnManualSubmit 所有修改暂时缓存,手动调用submitAll保存
QItemSectionModel 选择模型
QItemSectionModel * theSection = new QItemSectionModel(QSqlTableModel)
当用户在TableView上操作时,获取当前选择的行、列信息,并在选择的单元格变化时发出currentChanged()信号,当前行变化时,发射currentRowChanged()信号。
QSqlRecord 表示记录的类
QSqlRecord QSqlTableModel::record() 返回只用字段定义没有数据
QSqlRecord QSqlTableModel::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()可以直接移动到某一行记录