QSqlTableModel类提供了一个单数据表的编辑模型。
Header: #Include
qmake: QT += sql
Inherits: QSqlQueryModel
Inherited By: QsqlRelationalTableModel
void QSqlTableModel::setTable(const QString &tableName)
bool QAbstractItemModel::setHeaderData(
int section, //表头号
Qt::Orientation orientation, //布局方向
const QVariant &value //表头内容
)
enum Qt::Orientation
此类型用于表示对象的方向。
Constant | Value |
---|---|
Qt::Horizontal | 0x1 |
Qt::Vertical | 0x2 |
void QSqlTableModel::setEditStrategy(EditStrategy strategy)
enum QSqlTableModel::EditStrategy
此枚举类型描述在数据库中编辑值时选择哪种策略。
Constant | Value | Description |
---|---|---|
QSqlTableModel::OnFieldChange | 0 | 对模型的所有更改将立即应用于数据库。 |
QSqlTableModel::OnRowChange | 1 | 当用户选择其他行时,将应用对行的更改。 |
QSqlTableModel::OnManualSubmit | 2 | 所有更改都将缓存在模型中,直到调用SubmitAll()或revertAll()为止。 |
注意:只能设置一次,多次设置,后者会覆盖前者。
可以在一次过滤条件中用AND连接多个条件SQL
void QSqlTableModel::setFilter(const QString &filter)
Sample:
model->setFilter("role = 3");
如果设置了过滤条件会根据过滤条件生成SQL,查询当前表的信息至Model类中。
否则,就全部查询。
bool QSqlTableModel::select()
QMap QAbstractItemModel::itemData(const QModelIndex &index) const
Sample:
查询第r行,第c列的单元格
int id = model->itemData(model->index(r, c))[0].toInt();
bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
Sample:
model->setData(model->index(r, y), 1); //第r行第y列修改为1
ui->tableView->setModel(model); //将模型设置到视图中
int curRow = ui->tableView->currentIndex().row(); //获取选中行号
隐藏第c列
ui->tableView->setColumnHidden(c, 1); //隐藏编号列
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //使其不可编辑
Database:
Code:
QSqlTableModel *model = new QSqlTableModel(this);
model->setTable("user"); //指定表
model->setFilter("role = 3"); //指定查询条件
model->setHeaderData(1,Qt::Horizontal,"用户名");
model->setHeaderData(2,Qt::Horizontal,"密码");
model->setHeaderData(3,Qt::Horizontal,"电话");
model->setHeaderData(4,Qt::Horizontal, "地址");
model->setHeaderData(5,Qt::Horizontal, "角色");
model->select(); //查询
model->setEditStrategy(QSqlTableModel::OnManualSubmit); //Model编辑策略,提交生效
ui->tableView->setModel(model); //将模型设置到视图中
ui->tableView->setColumnHidden(0, 1); //隐藏编号列
ui->tableView->setColumnHidden(5, 1); //隐藏角色列
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //使其不可编辑