2012-01-14 15 views
2

簡単な質問です(うまくいけば簡単な答えです)。DisplayRoleの代わりにQTreeViewでカスタムロールを使用する

QTreeViewは、デフォルトで表示する行をフェッチするときに、モデルのデータ関数にQt.DisplayRoleを渡します。 しかし、Qt.DisplayRoleの代わりに 'MyAwesomeTreeDisplayRole'を渡したいとしたら、どうすればいいですか?
私は、表示がdisplayroleを使用するかどうか、またはそれを上書きする方法については何も見当たりません。私は、このようなひどい事をやりたい理由を尋ねる直前

...基本的に、私のQAbstractItemModelが両方のツリービュー(1列目)と(親に基づいて複数の列、)テーブルビューのために使用できるように

を目的としています。
両方のタイプのビューで同じDisplayRoleを使用しても実際には機能しません。その両方のために同じデータを返す必要があるからです。この結果、私は、いくつかの列の連結を返すときに、ツリービューの最初の列のみを見ることになります。

私は最も単純な方法は、カスタムロール(TreeDisplayRoleとTableDisplayRole)を使うことだと思います。

ありがとうございます。

答えて

0

私は分かりませんが、pythonでそれを行う方法はありますが、アイテムデータを表示するにはown delegateを作成する必要があります。デリゲートは、あなただけcolumnCountは、トップレベルのインデックスに正しくにを設定している必要があり、実際には一般的なケースでQTreeViewは、複数の列を表示することができ、インデックスから任意のデータを要求し、それを

注意を描画オブジェクトで、

+0

は、おかげで、私はそれを試してみますよ。ツリービューは複数の列を表示することができますが、グローバルな列数を1つだけ設定するように見えるので、列。また、11の列はツリービューのための種類の厄介な感じです。 :P –

0

QTreeViewを使用して、多数の列を持つ単純な表を表示しました。うまくいきます。columnCountChanged信号を送信して列数を調整できます。だから私はあなたが求めていることをする必要があるかどうか分からない。

しかし、私はItemDelegatesも使用しています。my_treeview.setItemDelegate()を使用して、ツリービューをアイテムデリゲートにポイントします。このサブクラスのQStyledItemDelegateを使用すると、多くの作業を行う必要はありません。ほとんどすべてをスーパーに渡すことができます。

ユーザーの役割は、カスタムItemDelegateとItemModelの間で合意され、QtCore.Qt.UserRole以上であれば好きなことができます。

(編集:申し訳ありませんが、私は新しい答えとしてこれを入れるが、それは本当にLol4t0が言ったことにだけ精緻だ - 離れてcolumnCountChangedのものから)

関連する問題