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"

2 つのデータベースが両方とも既定の接続に接続されていないのはなぜですか?

4

2 に答える 2

1

QSqlDatabase::addDatabase :

警告: 既存の接続と同じ名前の接続を追加すると、古い接続が新しい接続に置き換えられます。connectionName を指定せずにこの関数を複数回呼び出すと、デフォルトの接続が置き換えられます。

于 2015-08-03T08:13:40.603 に答える
0

実際に何が必要かを話し合って明確にすれば、答えは簡単でした。
myClass( QObject* parent = nullptr, QSqlDatabase data = QSqlDatabase::database() );宣言では、 I just need to use Now を使用する代わりに
myClass( QObject* parent = nullptr, QSqlDatabase data = QSqlDatabase::addDatabase( "QSQLITE" ) ); 、デフォルトのオプションは SQLite データベースを開くことであり、必要に応じて別のデータベースを提供できます。充実したディスカッションをしてくれた Amartel に感謝

于 2015-08-04T21:04:29.223 に答える