0

我正在尝试对 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"

为什么两个数据库不是都连接到默认连接?

4

2 回答 2

1

QSqlDatabase::addDatabase

警告:如果您添加与现有连接同名的连接,则新连接将替换旧连接。如果您多次调用此函数而不指定 connectionName,则默认连接将被替换。

于 2015-08-03T08:13:40.603 回答
0

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

于 2015-08-04T21:04:29.223 回答