我试图在 QT Quick 中包含一个 SQLite 数据库,但我找不到任何示例。我只想能够访问数据库中的项目。有人知道我可以玩的任何示例程序吗?
最佳答案
你可以拿QSqlQueryModel例如,或任何其他 SQL 模型并将其添加到 QML 上下文并在 ListView 中使用它。
创建模型
在 QtQuick 组件中定义委托(delegate)用来访问数据的角色名称(data
方法有点天真,因为没有错误检查):
class SqlQueryModel: public QSqlQueryModel
{
Q_OBJECT
QHash<int,QByteArray> *hash;
public:
explicit SqlQueryModel(QObject * parent) : QSqlQueryModel(parent)
{
hash = new QHash<int,QByteArray>;
hash->insert(Qt::UserRole, QByteArray("someRoleName"));
hash->insert(Qt::UserRole + 1, QByteArray("otherRoleName"));
}
QVariant data(const QModelIndex &index, int role) const
{
if(role < Qt::UserRole) {
return QSqlQueryModel::data(index, role);
}
QSqlRecord r = record(index.row());
return r.value(QString(hash->value(role))).toString();
}
inline RoleNameHash roleNames() const { return *hash; }
};
将其添加到QML
创建新定义的模型类的实例并将其添加到 QML 上下文中
view = new QQuickView();
QSqlQueryModel *someSqlModel = new SqlQueryModel(this);
someSqlModel->setQuery("SELECT someRoleName, otherRoleName FROM some_table");
QQmlContext *context = view->rootContext();
context->setContextProperty("someSqlModel", someSqlModel);
view->setSource(QUrl("qrc:///MainView.qml"));
view->show();
将模型绑定(bind)到 QML View
将您的模型绑定(bind)到 ListViews model
属性,并使用之前定义的角色名称来访问委托(delegate)中的数据。
ListView {
id: someListView
model: someSqlModel
delegate: Text {
anchors.fill: parent
text: someRoleName
}
}
一些示例链接:
关于sqlite - 将 SQLite 与 Qt Quick 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16658360/