3

このチュートリアルでこのListStoreがどのように機能するかについて少し混乱していますhttp://developer.gnome.org/gtkmm-tutorial/3.0/sec-treeview-examples.html.en

row [m_Columns.m_ITEM]=valueを除いてほとんどすべてを理解しています

私の問題は、オーバーロードされた[]に渡される他のオブジェクトに基づいて、行のどの列に値を設定するかをどのように認識するかです。タイプが同じかどうかをチェックするだけですか?もしそうなら、同じタイプの2つの列がある場合はどうなりますか?それがどの列であるかを把握するために、メモリオフセットに基づいて機能しますか?

m_Columnsインスタンスのメンバーを指定してから、値をどの列に配置するかを判断するのに苦労しています。

ツリーモデルシステムで内部がどのように機能するかを誰かに説明してもらえるとしたら、それは、作成してから新しい行を追加する各ステップで何が起こるかなど、すばらしいことだと思います。

4

1 に答える 1

4

テンプレートのトリックが少し進んでいます。の配列演算子は、TreeRowのインスタンス化ごとにオーバーロードされますTreeModelColumn<ColumnType>。列に割り当てて読み取ることができるように、TreeValueProxy<ColumnType>実際にそれらの操作を実装するプロキシオブジェクト()を返します。プロキシオブジェクトは、配列のようなオブジェクトを実装するための標準的なC++手法です。プロキシには、実際の作業を行うために使用する関連オブジェクト TreeRowへ の参照が含まれています。TreeModelColumn<ColumnType>

TreeModelColumn<ColumnType>オブジェクトには、列のタイプに対応するタイプと、列の位置に対応する整数も格納さgobjectれます。TreeRow::set_value<ColumnType>()これは最終的に、およびで始まるgtk+ライブラリとのインターフェースに使用されますTreeRow::get_value<ColumnType>()

厄介な詳細が必要な場合に確認するソースファイルは、TreeRowの場合は ここにあり、TreeModelColumnの場合はここにあります

于 2012-06-28T18:33:24.993 に答える