如何从 QML 访问 'in-memory' sqlite 数据库?
How can access 'in-memory' sqlite database from QML?
我使用 Qt-C++ 创建了一个内存中的 SQLite 数据库
const QString m_DRIVER = "QSQLITE";
QSqlDatabase m_db;
m_db = QSqlDatabase::addDatabase(m_DRIVER, "mkddb");
m_db.setDatabaseName(":memory:");
我的问题是如何在 QML 中访问它?
只要您在您的 class 中建立了数据库连接,例如。 Database Handler
,你可以用一种非常简单的方式将它暴露给QML。以下是此类处理程序的一个非常简短的概念:
DatabaseHandler.h
class DatabaseHandler : public QObject
{
Q_OBJECT
public:
explicit DatabaseHandler(QObject *parent = nullptr);
Q_INVOKABLE void addDatabaseEntry(QString queryString);
private:
QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE", "mkddb");
QSqlQuery databaseQuery;
};
DatabaseHandler.cpp
DatabaseHandler::DatabaseHandler(QObject *parent) : QObject(parent)
{
database.setDatabaseName(":memory:");
database.open();
databaseQuery = QSqlQuery(database);
}
void DatabaseHandler::addDatabaseEntry(QString queryString)
{
databaseQuery.exec(queryString);
}
对象本身必须是 QObject
和上面代码中的 Q_OBJECT
宏。
将 DatabaseHandler
暴露给 QML,例如。 main.cpp
你必须这样写:
qmlRegisterType<DatabaseHandler>("com.organization.databasehandler", 1, 0, "DatabaseHandler");
然后在 QML 代码中您可以导入数据库处理程序并使用它的方法 只要它们是用宏声明的 Q_INVOKABLE
就像 [=20] =]:
import com.organization.databasehandler 1.0
ApplicationWindow {
DatabaseHandler {
id: databaseHandler
}
Button {
onClicked: databaseHandler.addDatabaseEntry(/*Query to execute on the database*/)
}
}
我使用 Qt-C++ 创建了一个内存中的 SQLite 数据库
const QString m_DRIVER = "QSQLITE";
QSqlDatabase m_db;
m_db = QSqlDatabase::addDatabase(m_DRIVER, "mkddb");
m_db.setDatabaseName(":memory:");
我的问题是如何在 QML 中访问它?
只要您在您的 class 中建立了数据库连接,例如。 Database Handler
,你可以用一种非常简单的方式将它暴露给QML。以下是此类处理程序的一个非常简短的概念:
DatabaseHandler.h
class DatabaseHandler : public QObject
{
Q_OBJECT
public:
explicit DatabaseHandler(QObject *parent = nullptr);
Q_INVOKABLE void addDatabaseEntry(QString queryString);
private:
QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE", "mkddb");
QSqlQuery databaseQuery;
};
DatabaseHandler.cpp
DatabaseHandler::DatabaseHandler(QObject *parent) : QObject(parent)
{
database.setDatabaseName(":memory:");
database.open();
databaseQuery = QSqlQuery(database);
}
void DatabaseHandler::addDatabaseEntry(QString queryString)
{
databaseQuery.exec(queryString);
}
对象本身必须是 QObject
和上面代码中的 Q_OBJECT
宏。
将 DatabaseHandler
暴露给 QML,例如。 main.cpp
你必须这样写:
qmlRegisterType<DatabaseHandler>("com.organization.databasehandler", 1, 0, "DatabaseHandler");
然后在 QML 代码中您可以导入数据库处理程序并使用它的方法 只要它们是用宏声明的 Q_INVOKABLE
就像 [=20] =]:
import com.organization.databasehandler 1.0
ApplicationWindow {
DatabaseHandler {
id: databaseHandler
}
Button {
onClicked: databaseHandler.addDatabaseEntry(/*Query to execute on the database*/)
}
}