将QSqlTableModel子类化为设置数据库

时间:2015-08-02 19:01:12

标签: qt qsqltablemodel qsqldatabase

我正在尝试子类化QSqlTableModel,以便构造函数将设置模型所需的数据库。

我的代码看起来像是:

MyClass::myClass( QObject* parent, QSqlDatabase data )
    :QSqlTableModel(parent, data)
{
    auto db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    if( !db.open() )
    {
        //Some debug info
    }
    if( !database().isOpen() )
    {
        // Some debug info that is called
    }
    qDebug() << database().connectionName();
    qDebug() << db.connectionName();
}

然后构造函数将输出:
“”
“qt_sql_default_connection”

为什么这两个数据库都没有连接到默认连接?

2 个答案:

答案 0 :(得分:1)

QSqlDatabase::addDatabase

  

警告:如果添加的连接名称与现有连接相同   连接,新连接替换旧连接。如果你这样称呼   函数不止一次而没有指定connectionName,默认值   连接将被替换。

答案 1 :(得分:0)

一旦讨论清除了实际需要的内容,答案就很简单。 在声明中,而不是使用
myClass( QObject* parent = nullptr, QSqlDatabase data = QSqlDatabase::database() );我只需要使用
myClass( QObject* parent = nullptr, QSqlDatabase data = QSqlDatabase::addDatabase( "QSQLITE" ) ); 现在,默认选项是打开SQLite数据库,如果需要,可以提供另一个数据库。 感谢Amartel的富有成效的话题