Qt C ++ Сделать QSqlDatabase статической внутри класса - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь реализовать один экземпляр QSqlDatabase для всех экземпляров моего класса.

#include <QCoreApplication>
#include <QtSql/QSqlDatabase>

class MyClass
{
    static QSqlDatabase db;
};

QSqlDatabase MyClass::db = QSqlDatabase::addDatabase("QSQLITE");

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    return a.exec();
}

Но этот код не работает в режиме выпуска:

QSqlDatabase: anЭкземпляр QCoreApplication необходим для загрузки плагинов драйверов

Экран (ошибка)
Я использовал windeployqt.exe для создания независимой версии выпуска.

В Debug это работает, потому что sqldriver загружается прямо из каталога Qt.Когда я пытаюсь выпустить его, это не имеет смысла.

1 Ответ

0 голосов
/ 08 февраля 2019

QSqlDatabase: экземпляр QCoreApplication необходим для загрузки плагинов драйверов

Так что вам не разрешено загружать sql плагинов на глобальном уровне.Только не пытайтесь сделать его «статическим внутри класса», но сделайте его «статическим внутри статического метода», как в типичном одноэлементном шаблоне.Вроде,

class MyClass
{
    static QSqlDatabase& get_db();
};

QSqlDatabase& MyClass::get_db()
{
    static QSqlDatabase db;
    if (!db.isValid())
        db = QSqlDatabase::addDatabase("QSQLITE");
    return db;
}
...