0

Qtには、プルしているsqliteデータベースがあります。テーブルの1つ(configTable)にQSqlTableModel添付されています。

The table has a simple 2-column key/value structure. The keys are strings with folder-like values such as "general/name", "general/version", "foo/bar/baz", etc. Values are just arbitrary variants.

I'd like to display this data in an easier-to-browse QTreeView instead of a QTableView, as my key structure lends itself very nicely to that.

Before I go reimplementing classes and all sorts of crazy things - is there an elegant solution to this? And if I reimplement or extend classes, which ones should I look at?

Thank you.

4

2 に答える 2

1

リストvalue/value/valueとツリーモデルの間の解析とマッピングを自分で行う必要があります。しかし、これを行う(トリッキーな)Qtの方法があります。

Qt Model-View アーキテクチャは、QAbstractItemModelクラスに基づいて、さまざまなデータ構造を表すことができます。Qtモデルは、ビューに伝えるためにいくつかの関数を実装する必要があります:列、行、子などの数。


リスト モデル (Qt が提供QAbstractListModel) は、基本的にビューに次のように言うモデルです。

  • ルート項目が 1 つあります (すべてのデータ項目は で表されQModelIndex、ルートには無効な親があります)
  • このルート アイテムには 1 つの列しかありません
  • このルート項目には、リストの要素と同じ数の行があります

ツリー モデルは、それぞれに適切な子を返しますQModelIndex。Qt の抽象モデルでは、実際に各子項目をテーブルにすることができます (QModelIndex常に親行と列のインデックスがあります)。


簡単に言えば、プロキシモデル(QAbstractProxyModelまたは適切なサブクラスですが、必要に応じて存在しないと思います)を作成する必要があります。このプロキシは、送信しているデータを変換します。QSqlTableModelここで、リストではなく実際にツリーがあることをビューに伝えることができます。

ルート項目は、キーのデータベース リスト (の最初の要素foo/bar/whatever) の項目ですが、同じキーを持つすべてのルート項目を再グループ化する必要があります。

于 2017-12-13T09:18:23.583 に答える
-1

私の知る限り、手動でしか作成できません。

基本的に、Qt がデータをツリー モデルに変換する方法をどのように知っていると思いましたか。

于 2015-08-26T01:26:58.680 に答える