sqlite - 将 SQLite 与 Qt Quick 集成

标签 sqlite qml qt-quick

我试图在 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
    }
}

一些示例链接:

How to use a QSqlQueryModel in QML

QML and QSqlTableModel

关于sqlite - 将 SQLite 与 Qt Quick 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16658360/

相关文章:

sql - 查询以查找在 sqlite 中存储为邻接列表的树中的下一个项目

java - 使用 Eclipse 访问现有的 SQLite 数据库

sqlite - System.Data.SQLite Close() 不释放数据库文件

linux - 如何修复从 Linux 上的 Docker 启动的 Qt5 (QML) GUI 中的 libGL 错误?

qt-quick - QQuickView 和 QQuickItem 有什么区别?

c++ - QML 新手在将 C++ 后端与 QML 前端连接起来时需要一些帮助

python - 即时更改 SQLAlchemy 模型列类型

c++ - 黑莓模拟器 : ViewFinder starting failed 级联相机错误

c++ - 使用 QAbstractItemModel 将 2D C++ 游戏板暴露给 QML

c++ - QML - Q_INVOKABLE 函数