【问题标题】:Qt Table model to Tree modelQt 表模型到树模型
【发布时间】:2015-08-25 15:52:50
【问题描述】:

在 Qt 中,我有一个要导入的 sqlite 数据库。其中一个表 (configTable) 附有 QSqlTableModel

该表有一个简单的 2 列键/值结构。键是具有类似文件夹值的字符串,例如“general/name”、“general/version”、“foo/bar/baz”等。值只是任意变体。

我想以更易于浏览的 QTreeView 而不是 QTableView 显示这些数据,因为我的密钥结构非常适合这种情况。

在我去重新实现类和各种疯狂的事情之前 - 有没有一个优雅的解决方案?如果我重新实现或扩展类,我应该看哪些?

谢谢。

【问题讨论】:

    标签: c++ qt qsqltablemodel


    【解决方案1】:

    您必须自己在value/value/value 列表和树模型之间进行解析+映射。但是有一个(棘手的)Qt 方法可以做到这一点。

    Qt Model-View architecture 可以基于QAbstractItemModel 类表示许多不同的数据结构。 Qt 模型必须实现一些函数来告诉视图:有多少列、行、子项等。


    列表模型(Qt 提供QAbstractListModel),基本上是一个对视图说的模型:

    • 我有一个根项(所有数据项都用QModelIndex 表示,根有一个无效的父项)
    • 此根项只有一列
    • 此根项目的行数与列表中的元素数一样多

    树模型将为每个QModelIndex 返回相应的子级。 Qt 的抽象模型实际上允许每个子项是一个表(QModelIndex 总是有一个父一个行列索引)。


    长话短说,您必须创建一个代理模型(QAbstractProxyModel 或一个合适的子类,但根据您的需要,我认为没有)。此代理将转换您的QSqlTableModel 正在发送的数据,您可以在这里告诉视图您实际上有一个树而不是列表。

    您的根项是您的数据库键列表中的项(foo/bar/whatever 的第一个元素),但您需要重新组合具有相同键的所有根项。

    【讨论】:

      【解决方案2】:

      AFAIK 你只能手动制作。

      基本上,因为您认为 Qt 怎么知道如何将您的数据转换为树模型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多