1

Python と Qt を使用した高速 GUI プログラミングという本の中addActions() で、メイン ウィンドウ( )を呼び出すことによって中央のウィジェットにコンテキスト メニューが追加される理由がわかりませんself(p. 180):

self.addActions(self.imageLabel,
                (editInvertAction, …))

は でselfあり、QMainWindowimageLabel中央QLabelのウィジェットとして設定されています。

# Added actions will be put in a context menu:
self.imageLabel.setContextMenuPolicy(Qt.ActionsContextMenu)
self.setCentralWidget(self.imageLabel)

では、メイン ウィンドウが何らかの方法で ( を介してself.addActions()) 中央ウィジェットのコンテキスト メニューに関連付けられるのはなぜでしょうか? addActions()中央のウィジェットで直接呼び出すだけで十分ではありませんか? 実際、以下はコンテキスト メニューを作成します。

self.imageLabel.addActions((editInvertAction, …))

本の例がコンテキスト メニューをこのようにしないのはなぜですか? self.addActions(…)これは、より複雑な形式と同等ではありませんか?

PS : QMainWindow.addActions() のドキュメントには、最初の引数 ( self.imageLabel、上記) についても言及されていないことがわかります! この本が最後のスニペットではなく上の最初のスニペットを使用している理由について、私は完全に迷っています… 助けて!:)

4

1 に答える 1

1

QMainWindow で self.addAction() を使用すると、中央のウィジェットだけでなく、すべての QMainWindow の子 (ドック、ステータスバー、ツールバー、メニューバーなど) がこれらのアクションを使用できるようになります。

しかし、きめの細かいコンテキスト メニュー コントロールを取得する最善の方法は、customContextMenuRequested シグナル ( http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwidget.html#customContextMenuRequested ) を使用することです。

于 2010-08-30T08:06:45.720 に答える