3

私は の を持っていQTreeViewますQStandardItemModel。カスタムデリゲートを使用してデータをペイント/編集しています。createEditorメソッド内でparent.window()、アプリケーション全体のメイン ウィンドウにアクセスするために使用します (別の質問のコードへのリンクについては、以下を参照してください)。

createEditor質問:デリゲートの親は何ですか? 次のパラメータで定義されます。

def createEditor(self, parent, option, index)

紛らわしいのは、QStyledItemDelegateが初期化されたときです。そのtype(parent)ために出力すると、ツリーが返されます (このデリゲートを表示するようにしたツリー)。これは私が期待するものです。ただし、メソッドの実装内で同じことを実行して出力すると、単に が返されます。ここから得た提案である実行時に同じ結果が得られます。type(parent)createEditorQWidgetparent.metaObject().className()

QT : オブジェクトのクラス名を取得する

ツリー ビューで定義した属性 ( などparent.rootItem) を取得しようとすると、属性エラーが発生します。それで、ここで何が起こっているのですか?エディタの親は何ですか?

PyQtのドキュメントにはあまり助けがありません:

親引数は、None でない場合、self が PyQt ではなく Qt によって所有されるようにします。QAbstractItemDelegate.createEditor() から再実装されました。index で指定されたアイテムを編集するために使用されるウィジェットを返します。親ウィジェットとスタイル オプションは、エディター ウィジェットの表示方法を制御するために使用されます

これはすべて、ここのソリューションへのコメントで説明されている別の問題のソリューションによって開始されたことに注意してください。

https://stackoverflow.com/a/32928091/1886357

4

1 に答える 1

3

親は、デリゲートを使用しているビューのビューポート ウィジェットです。ビューポートは、ビューによって継承されるスクロール領域の一部です。

したがって、あなたの特定の例では:

    def createEditor(self, parent, option, index):
        print(parent is parent.window().tree.viewport()) # True
于 2015-10-04T22:50:52.570 に答える