[QtClassAPI]QSqlTableModel与QTableView

QSqlTableModel

Intro

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

QTableView

应用QSqlTableModel

ui->tableView->setModel(model); //将模型设置到视图中

获取选定行号

int curRow = ui->tableView->currentIndex().row(); //获取选中行号

隐藏指定列

隐藏第c列

ui->tableView->setColumnHidden(c, 1); //隐藏编号列

设置不可编辑

ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);   //使其不可编辑

Sample

Database:

[QtClassAPI]QSqlTableModel与QTableView_第1张图片

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);   //使其不可编辑

你可能感兴趣的:(Qt)