2015-08-02 5 views
0

Я пытаюсь подклассифицировать QSqlTableModel, чтобы конструктор установил базу данных, которая необходима для модели.Подкласс 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»

Почему две базы данных не подключены по умолчанию связь?

ответ

1

QSqlDatabase::addDatabase:

Внимание: Если вы добавили соединение с тем же именем, что и существующий соединение, новое соединение заменяет старую. Если вы вызываете эту функцию более одного раза без указания имени соединения, соединение по умолчанию будет заменено.

+0

Да, и это то, что я хотел, однако кажется, что соединение по умолчанию никогда не выполняется при вызове QSqlDatabase(). – Paul

+0

Если вы хотите, чтобы эти два соединения были подключены к имени подключения по умолчанию, вам необходимо сделать это: 'auto db = QSqlDatabase :: database();'. – Amartel

+0

Но для того, чтобы получить его для доступа к базе данных SQLite, мне нужно использовать addDatabase (как в моем примере), это также связано с базой данных по умолчанию, проблема в том, что, по-видимому, с помощью 'myclass (this, QSqlDatabase :: database()) 'не создает базу данных с соединением по умолчанию, а только с недопустимой базой данных. – Paul

0

Ответ был прост, как только в ходе обсуждения было выяснено, что на самом деле необходимо. В декларации, вместо того, чтобы использовать
myClass(QObject* parent = nullptr, QSqlDatabase data = QSqlDatabase::database()); мне просто нужно использовать
myClass(QObject* parent = nullptr, QSqlDatabase data = QSqlDatabase::addDatabase("QSQLITE")); Теперь параметр по умолчанию, чтобы открыть базу данных SQLite, и если вы хотите, вы можете предоставить другую базу данных. Спасибо Amartel за плохую дискуссию