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什么都没显示,只有一片空白。求详细说明。

  在QT的widget中用tableview显示sqlite数据库表中的内容。
  假设有数据库文件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)");中主键的设置错误
谢谢你的回答。

本回答被提问者采纳
参考技术C 解决一切编程问题追问

什么意思?不明不白的。(???)

[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中实时显示,

QT中,我将一张数据库表显示在tableView上,我需要去设置或修改tableView上每一行的颜色,该怎么做?

iOS 怎么避免tableview刷新数据错乱

如何在QTableView Qt C ++中将sqlite db数据显示为多列视图?