QT中table view怎么显示sqlite数据库的内容?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT中table view怎么显示sqlite数据库的内容?相关的知识,希望对你有一定的参考价值。
我在QT中创建了一个基于widget类的Gui应用项目,项目名为TableView。我在.pro文件中加入了QT += core gui sql,在Widget.ui中丢了一个table view表格命名为tv,在Widget.h中加入了以下头文件
以下是main.cpp里main函数里面的代码,main函数外无改动。
再来是Widget的代码,同上一样图片外的地方无改动。
问题:
运行无错误但为什么table view什么都没显示,只有一片空白。求详细说明。
假设有数据库文件test.db,有表table(id integer, name nvarchar(20),age integer),且有数条数据。
首先用QTcreator创建一个基于Widget类的窗口,再拖一个tableview到widget中,保存,然后按照如下方法进行:
1.在widget.h中增添头文件:QtSql/qsql.h、QtSql/QsqlDatabase、QtSql/QsqlQuery、QtSql/QsqlQueryModel
2.在.pro工程文件中添加:QT+=sql
3.在widget.cpp中widget的构造函数中添加如下代码:
QsqDatabase db = QsqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
if(!db.open())
//错误处理
static QSqlQueryModel *model = new QSqlQueryModel(ui->tableview);
model->setQuery(QString("select * from table"));
model->setHeaderData(0,Qt::Horizontal,QObject::tr("编号"));
model->setHeaderData(1,Qt::Horizontal,QObject::tr("姓名"));
model->setHeaderData(2,Qt::Horizontal,QObject::tr("年龄"));
ui->tableview->setModel(model);
db->close();
这样之后,table表里的内容就会显示到tableview中了。 参考技术A 把这句:model->setQuery(QString("select * from table"));
改为:model->select();
就能显示。我的表中有40多万条记录,加上以下两句,则显示最后面的记录,当然,可通过滚动条往前翻。
model->select();
while(model->canFetchMore())
model->fetchMore();
ui.tableView->setModel(model);
ui.tableView->scrollToBottom();
你的最后两句应该为:ui.tv->setModel(model);
ui.tv->scrollToBottom(); 参考技术B model->setQuery()以后
(去掉其他语句)
直接ui->tv->setModel(model),能不能出来显示?追问
还是一片白,能帮我分析下是哪出了问题吗?
追答setQuery不会去执行查询sql。
在setQuery之后,调用一下
mode->query().exec(); 试试
我找到原因了。
是 model->setQuery(QString("select * from student;"));的student后面多了分号和
model->setQuery("create table student(Id primary key int,name varchar)");中主键的设置错误
谢谢你的回答。
什么意思?不明不白的。(???)
[QT][SQL]sql学习记录5_sqlite视图(View)
SQLite 视图(View)
视图(View)只不过是通过相关的名称存储在数据库中的一个 SQLite 语句。视图(View)实际上是一个以预定义的 SQLite 查询形式存在的表的组合。
视图(View)可以包含一个表的所有行或从一个或多个表选定行。视图(View)可以从一个或多个表创建,这取决于要创建视图的 SQLite 查询。、
视图(View)是一种虚表,允许用户实现以下几点:
-
用户或用户组查找结构数据的方式更自然或直观。
-
限制数据访问,用户只能看到有限的数据,而不是完整的表。
-
汇总各种表中的数据,用于生成报告。
SQLite 视图是只读的,因此可能无法在视图上执行 DELETE、INSERT 或 UPDATE 语句。但是可以在视图上创建一个触发器,当尝试 DELETE、INSERT 或 UPDATE 视图时触发,需要做的动作在触发器内容中定义。
创建视图
SQLite 的视图是使用 CREATE VIEW 语句创建的。SQLite 视图可以从一个单一的表、多个表或其他视图创建。
CREATE VIEW 的基本语法如下:
CREATE [TEMP | TEMPORARY] VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];
您可以在 SELECT 语句中包含多个表,这与在正常的 SQL SELECT 查询中的方式非常相似。如果使用了可选的 TEMP 或 TEMPORARY 关键字,则将在临时数据库中创建视图。
实例
假设 COMPANY 表有以下记录:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
现在,下面是一个从 COMPANY 表创建视图的实例。视图只从 COMPANY 表中选取几列:
sqlite> CREATE VIEW COMPANY_VIEW AS
SELECT ID, NAME, AGE
FROM COMPANY;
现在,可以查询 COMPANY_VIEW,与查询实际表的方式类似。下面是实例:
sqlite> SELECT * FROM COMPANY_VIEW;
这将产生以下结果:
ID NAME AGE
---------- ---------- ----------
1 Paul 32
2 Allen 25
3 Teddy 23
4 Mark 25
5 David 27
6 Kim 22
7 James 24
删除视图
要删除视图,只需使用带有 view_name 的 DROP VIEW 语句。DROP VIEW 的基本语法如下:
sqlite> DROP VIEW view_name;
下面的命令将删除我们在前面创建的 COMPANY_VIEW 视图:
sqlite> DROP VIEW COMPANY_VIEW;
以上是关于QT中table view怎么显示sqlite数据库的内容?的主要内容,如果未能解决你的问题,请参考以下文章
[QT][SQL]sql学习记录5_sqlite视图(View)
如何在tableview中显示sqlite3中 的表中的信息
QT如何实现QSqltablemodel实时更新数据库,并在tableview中实时显示,