0

我正在尝试为我的类的所有实例实现一个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:加载驱动插件需要一个 QCoreApplication 的实例

屏幕(错误)
我使用windeployqt.exe构建独立的 Release 版本。

在 Debug 中这是有效的,因为 sqldriver 直接从 Qt 目录加载。当我试图将其释放时,它没有任何意义。

4

1 回答 1

0

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;
}
于 2019-02-08T20:24:24.793 回答