Qt Quick,SQLITE - 如何将多个视图绑定到一个模型/(具有一个db的多个模型)

时间:2017-06-11 15:25:13

标签: c++ qt sqlite qml

我正在努力解决以下问题:

  • 我有一个带有ListView的QML,其中包含SQL db中的所有学生
  • 我还有另一个QML文件,其中包含一个页面,其中包含所选学生的详细信息。

当用户点击列表中的一个条目时,他(使用StackView)被移动到第二个QML,并包含所有细节。

在详细信息页面上,用户可以修改数据并进行保存。问题是,在执行此操作后,列表不会刷新(例如,当用户添加新学生时,列表中没有新条目)。

这背后的原因是当我打开DetailsPage时,我正在创建一个可以访问SQL中同一个表的新模型。然后,当我提交更改时,新模型会更新,但不会更新旧模型(与列表连接的模型)。所以当我回到列表时,它仍然保留旧数据。

现在我正在寻找解决问题的方法,我有一些想法,但我不确定哪一个是最佳解决方案(可能没有):

  • 我尝试的一件事是在多个视图中重用相同的模型。它没有真正起作用,因为在DetailsPage中我只需要看到与所选学生匹配的这些行。所以我需要过滤它,但是如何?通过设置模型属性(我在其中一个教程中看到过)?我将如何将其重新设置回初始状态?
  • 另一个想法是为DetailsPage创建一个不同的模型,并在提交更改后(可能在从StackView弹出页面时),通知上一个模型有关更改并强制它发出dataChanged信号。但同样 - 我真的不知道该怎么做。

目前,StudentList中的模型被声明为:

SqlDb {
    id: sqlModel
    onDataChanged: {
        console.log("TROLO")
    }
}

所以里面什么都没有。打开DetailsPage时,我需要指定名称来过滤结果,使其看起来像:

Layout.fillHeight: true
SqlDb {
    id: sql_model
    name: studentName
    onDataChanged: {
        console.log("TRALA")
    }
}

提交更改时,我得到了" TRALA"印刷但不是" TROLO"。

我主要使用这个官方的Qt教程 https://doc.qt.io/qt-5/qtquickcontrols2-chattutorial-example.html

0 个答案:

没有答案
相关问题