[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

此类型用于表示对象的方向。

ConstantValue
Qt::Horizontal0x1
Qt::Vertical0x2

设置编辑策略

void QSqlTableModel::setEditStrategy(EditStrategy strategy)

enum QSqlTableModel::EditStrategy
此枚举类型描述在数据库中编辑值时选择哪种策略。

ConstantValueDescription
QSqlTableModel::OnFieldChange0对模型的所有更改将立即应用于数据库。
QSqlTableModel::OnRowChange1当用户选择其他行时,将应用对行的更改。
QSqlTableModel::OnManualSubmit2所有更改都将缓存在模型中,直到调用SubmitAll()或revertAll()为止。

设置过滤条件

注意:只能设置一次,多次设置,后者会覆盖前者。

可以在一次过滤条件中用AND连接多个条件SQL

void QSqlTableModel::setFilter(const QString &filter)

Sample:

model->setFilter("role = 3");

查询

如果设置了过滤条件会根据过滤条件生成SQL,查询当前表的信息至Model类中。

否则,就全部查询。

bool QSqlTableModel::select()

获取指定单元格内容

QMap<int, QVariant> 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:

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);   //使其不可编辑
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值