2012-03-26 11 views

答えて

3

QSqlQueryQSqlQuery(QSqlDatabase db)コンストラクタを使用して初期化する必要があります。

これを行うには、コンストラクタでイニシャライザリストを使用し、DB接続を既に設定しておくか、ポインタを使用してQSqlQueryを後で初期化する必要があります。初期化DBを取っABCコンストラクタ(メインでDBを作成)して

ABC(QSqlDatabase _db) : 
    db(_db), 
    memberQuery(db) 
{ 
    Q_ASSERT(db.isOpen()); 
} 

それとも

class ABC 
{ 
    QSqlDatabase db; 
    QSqlQuery* memberQueryPtr; 

    public: 
    ABC() : db(QSqlDatabase::addDatabase("QSQLITE")),memberQueryPtr(0) 
    { 
     db.setDatabaseName("test"); 
     if (!db.open()) 
     return; 
     memberQueryPtr = new QSqlQuery(db); 
    } 

    ~ABC() 
    { 
     delete memberQueryPtr; memberQueryPtr = 0; 
    } 

    // ... 
}; 
+0

そして、なぜデシベルでinitializaing witoutローカルオブジェクトの仕事? – Dewsworld

+1

これは、データベースを追加した後にデフォルトの接続になるため、その後に作成された 'QSqlQuery'で使用されるためです。クラス・プロパティを使用する場合、デフォルトのdb接続を作成する前にQSqlQueryがインスタンス化されます。 – Koying

関連する問題