QSqlTableModel变量定义时遇到的问题

原创 2016年08月29日 09:32:48

1.发现问题

在做一个Qt+Sqllite的程序时,定义了一个QSqlTableModel变量在MainWindow类(QSqlTableModel model;)中,可是无论怎么都无法从数据库表中读出数据(数据库连接是成功的)。

#endif // MAINWINDOW_H

2.问题进展

无法运行后发现之前写的代码是定义成指针的形式的,如:QSqlTableModel *model;,这时在MainWindow的构造函数中需要new一下,果然可以输出数据库表中内容。

3.解决问题

于是果断的查询了下源码和帮助文档


如果数据库是无效的,不链接默认的数据库中。所以推测在MainWindow类是定义变量QSqlTableModel model;无法在定义时链接到打开的数据库(或者说此时数据库还没有打开)。

所以如果在MainWindow类中定义就要定义成指针的形式。

database.h代码

#ifndef DATABASE_H
#define DATABASE_H
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QObject>
static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("waterData.db");
    if(!db.open()) return false;
    QSqlQuery query;
    query.exec(QObject::tr("create table user (id int, name vchar primary key,passWord vchar)"));
    query.exec(QObject::tr("insert into user values (1,'Tom',999)"));
    query.exec(QObject::tr("insert into user values (2,'Lily',888)"));
    query.exec(QObject::tr("insert into user values (3,'Lucy',666)"));
    query.exec(QObject::tr("insert into user values (4,'小强',555)"));
return true;
}
#endif // DATABASE_H


MainWindow.h代码

在Mainwindow类中定义QSqlTableModel *model;

MainWindow构造函数代码

    bool sqlState =createConnection();
    if(sqlState)
    {
        qDebug()<<"The database is open !";
    }
    else
    {
        qDebug()<<"open failed !";
    }
    model->setTable("user");
    model->select();
    for(int i=0;i<model->rowCount();++i)
    {
        QSqlRecord record = model->record(i);
        QString name = record.value("id").toString();
        qDebug()<<name<<__FUNCTION__;
    }

    model = new QSqlTableModel();
    model->setTable("user");
    model->select();
    for(int i=0;i<model->rowCount();++i)
    {
        QSqlRecord record = model->record(i);
        QString name = record.value("id").toString();
        qDebug()<<name<<__FUNCTION__;
    }

Qt QSqlTableModel 使用心得

Qt  QSqlTableModel  使用心得 连接数据库 执行sql查询,条件显示,排序 获取记录数,列数以及记录内容,字段内容 新增,修改,删除,恢复 其它     1-----...
  • liang890319
  • liang890319
  • 2011年12月05日 18:38
  • 28344

SQL表格模型QSqlTableModel

QSqlTableModel The QSqlTableModel class provides an editable data model for a single database tabl...
  • u013402772
  • u013402772
  • 2017年02月16日 14:45
  • 481

QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型

QSqlTableModel类继承至QSqlQueryModel类,该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序 常用函数 QVariant header...
  • reborntercel
  • reborntercel
  • 2011年11月22日 17:41
  • 15451

Qt中Qtableview的使用1(QSqlTableModel模型)

#include "mainwindow.h" #include "ui_mainwindow.h" #include #includeMainWindow::MainWindow(QWidget *...
  • len_yue_mo_fu
  • len_yue_mo_fu
  • 2016年09月14日 18:25
  • 664

Qt数据库 QSqlTableModel实例操作

http://mobile.51cto.com/symbian-271567_all.htm 本文介绍的是Qt数据库 QSqlTableModel实例操作,详细操作请先来看内...
  • XuePiaoFei1
  • XuePiaoFei1
  • 2015年06月16日 11:41
  • 3487

Qt 数据库模型(QSqlQueryModel,QSqlTableModel)获取模型中的所有数据

数据模型默认不是显示所有数据 最近使用QTableView结合QSqlQueryModel以及QSqlTableModel在写很多报表,中间产生了一系列出乎意料的现象。其中之一就是QSqlQueryM...
  • Heaven_Evil
  • Heaven_Evil
  • 2017年11月23日 17:45
  • 176

QSqlTableModel

声明:本文原创于yafeilinux的百度博客,http://hi.baidu.com/yafeilinux 转载请注明出处。 在上一篇我们讲到只读的QSqlQueryModel也可以使其可编辑...
  • c05170519
  • c05170519
  • 2011年08月20日 16:48
  • 8304

Qt 之 QSqlTableModel Class

详细描述 QSqlTableModel 类为单个数据库表提供了一个可编辑的数据模型。 QSqlTableModel 是一个从单个表读取和写入数据库记录的高级接口。它构建在较低级别的QSqlQuery...
  • Heaven_Evil
  • Heaven_Evil
  • 2017年09月05日 17:47
  • 353

QSqlTableModel 使用方法

Qt QSqlTableModel 使用心得 连接数据库 执行sql查询,条件显示,排序 获取记录数,列数以及记录内容,字段内容 新增,修改,删除,恢复 其它 1---------...
  • light1028
  • light1028
  • 2012年11月08日 23:03
  • 18168

[Qt教程] 第25篇 数据库(五)SQL表格模型QSqlTableModel

[Qt教程] 第25篇 数据库(五)SQL表格模型QSqlTableModel 楼主  发表于 2013-5-21 20:36:22 | 查看: 923| 回复: ...
  • dengjin20104042056
  • dengjin20104042056
  • 2014年11月10日 16:53
  • 1131
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QSqlTableModel变量定义时遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)