本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和
《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
QVariant
headerData
(
intsection
,
Qt
::
Orientationorientation
,
introle
=
Qt
::
DisplayRole
)
const
//设置水平头或垂直头标题
bool
setHeaderData
(
intsection
,
Qt
::
Orientationorientation
,
constQVariant
&
value
,
introle
=
Qt
::
EditRole
)
//返回行数
int
rowCount
(
constQModelIndex
&
parent
=
QModelIndex
()
)
const
//返回列数
int
columnCount
(
constQModelIndex
&
index
=
QModelIndex
()
)
const
//model->removeColumns (0)删除第一列
virtual
bool
removeColumns
(
int
column
,
int
count
,
const
QModelIndex
&
parent
=
QModelIndex
()
)
//提交所有被修改的数据,然后修改的数据被保存在数据库中
bool
QSqlTableModel
::
submitAll
()
//撤销所有的修改,如果数据库已经被提交了修改,就不能通过撤销修改改回来了
void
QSqlTableModel
::
revertAll
()
//恢复指定行的改变
virtual
void
revertRow
(
int
row
)
//筛选,按照字符串filter对数据库进行筛选,相当于SQL中的WHERE语句
void
QSqlTableModel
::
setFilter
(
const
QString
&
filter
)
//在筛选和排序的条件下,将数据库中符合要求的在mode表格中显示出来
bool
QSqlTableModel
::
select
()
//排序操作。按照列和Qt::SortOrder排序。Qt::SortOrder有升序和降序
void
QSqlTableModel
::
setSort
(
int
column
,
Qt
::
SortOrder
order
)
//插入行
bool
insertRow
(
int
row
,
const
QModelIndex
&
parent
=
QModelIndex
()
)
// 插入列
bool
insertColumn
(
intcolumn
,
constQModelIndex
&
parent
=
QModelIndex
()
)
//设置保存策略为手动提交
model
->
setEditStrategy
(
QSqlTableModel
::
OnManualSubmit
);
一、在QTableView中显示数据库中表的数据
QMessageBox
::
warning
(
this
,
tr
(“
tableModel
”),
tr
(“数据库错误:
%
1
″).
arg
(
model
->
lastError
().
text
()));
model
->
revertAll
();
//撤销修改
三、查询操作
相当于SQL语句:SELECT * FROM 表名 WHERE name = "name变量"
model
->
insertRow
(
rowNum
);
//添加一行,或者用insertRows(0,1),在0行添加1条记录,根据表的排序规则,可能移到与指定行不同的行位置上
model
->
setData
(
model
->
index
(
rowNum
,
0
),
id
);
//因为这里设置了ID为主键,所以必须给新行添加id属性值,id字段在第0列上
model
->
submitAll
();
//可以直接提交
int
ok
=
QMessageBox
::
warning
(
this
,
tr
(
"删除选中的行!"
),
tr
(
"你确定删除当前选取中的行吗?"
),
QMessageBox
::
Yes
,
QMessageBox
::
No
);
if
(
ok
==
QMessageBox
::
Yes
)
model
->
submitAll
();
//提交,在数据库中删除该行
model
->
revertAll
();
//如果不删除,则撤销
七、更新记录
必须先定位记录
可以看到这个模型很强大,而且完全脱离了SQL语句,就算你不怎么懂数据库,也可以利用它进行大部分常用的操作。这个模型提供了缓冲区,可以将所有修改先保存到model中,只有当我们执行提交修改后,才会真正写入数据库。当然这也是因为我们在最开始设置了它的保存策略:
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
OnManualSubmit表明我们要提交修改才能使其生效。可以先将修改保存起来,当我们执行提交函数时,再去真正地修改数据库。当然,这个模型比前面的模型更高级,前面讲的所有操作,在这里都能执行。