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()可以直接移動到某一行記錄