Qt C++ 使 QSqlDatabase 内部静态 class
Qt C++ Make QSqlDatabase static inside class
我正在尝试为我的 class.
的所有实例实施单个 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 instance of QCoreApplication is required for loading driver plugins
Screen (error)
我已经使用windeployqt.exe构建了独立的Release版本。
在调试中这有效,因为 sqldriver 直接从 Qt 目录加载。当我试图将其释放时,它毫无意义。
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
因此您不能在全局级别加载 sql
插件。只是不要尝试使它成为 "static inside class",而是使其成为 "static inside static method",就像在典型的单例模式中一样。有点,
class MyClass
{
static QSqlDatabase& get_db();
};
QSqlDatabase& MyClass::get_db()
{
static QSqlDatabase db;
if (!db.isValid())
db = QSqlDatabase::addDatabase("QSQLITE");
return db;
}
我正在尝试为我的 class.
的所有实例实施单个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 instance of QCoreApplication is required for loading driver plugins
Screen (error)
我已经使用windeployqt.exe构建了独立的Release版本。
在调试中这有效,因为 sqldriver 直接从 Qt 目录加载。当我试图将其释放时,它毫无意义。
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
因此您不能在全局级别加载 sql
插件。只是不要尝试使它成为 "static inside class",而是使其成为 "static inside static method",就像在典型的单例模式中一样。有点,
class MyClass
{
static QSqlDatabase& get_db();
};
QSqlDatabase& MyClass::get_db()
{
static QSqlDatabase db;
if (!db.isValid())
db = QSqlDatabase::addDatabase("QSQLITE");
return db;
}