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软件开发具有 管理员权限

些时候,我们需要在 Windows 平台以管理员权限运行某个应用程序。这样的应用程序会在右下角有一个小盾牌的图标: Windows 如何知道一个应用程序需要在运行时获取管理员权限?这是通过向应用程序...

20160721遇到的问题

今天遇到三个问题:1.点击变现层JSP花时间过长;2.打开表现层后,数据层的值传不过来;3.点击出现404问题 对于1这个问题我的解决方法,首先看表现层的href传值。接着看数据SQL是否写的对。最后...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

自定义SwitchPreference时遇到的问题

如何自定义带动效开关的SwitchPreference,怎样才能使得Preference的状态与自定义的开关Switch状态同步更新呢?
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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