2

こんにちは、みんな、

    一部のデータに応じて、動的に入力された QMenu を生成するコードがいくつかあります (これを thisMenu と呼びます)。QMenu thisMenu が作成され、いくつかの「メイン」QWidget を親として取り、この QWidget 内の QMenuBar に追加されます (menuBar.addMenu(&thisMenu)。後で、ユーザーがコンテキスト メニューから thisMenu にアクセスできるようにします (ユーザーが QWidget の一部を右クリックすると、QMenu (contextMenu と呼ばれる) がポップされ、前の QMenu がサブメニューとして表示されます)。

    contextMenu.addMenu(&thisMenu) で最初に作成した QMenu を再利用すると、contextMenu が適切なグローバル位置にポップしたとしても、thisMenu は常に他の位置に変換され、場合によっては contextMenu の上や下に表示されることがわかります。

    これがペアレンティング チェーンにリンクされていることをテストできます: thisMenu は contextMenu の子ではありません。contextMenu の子として作成すると、すべて問題ありません。thisMenu に似た QMenu を再作成したり、thisMenu の親を変更したりせずに、このケースをきれいに処理する方法はありますか? つまり、QMenuBar と一部のコンテキスト メニュー/QMenu の両方で thisMenu を再利用しますか? QMenuの親子チェーンを処理してQMenuを共有する適切な方法は何ですか?

    ありがとうございました、

4

2 に答える 2

3

QMenuの親子チェーンを処理してQMenuを共有する適切な方法は何ですか?

複数の場所で QMenu を共有することはできません。各 QMenu は一度に 1 つの場所にしか存在できません。別の QMenus を作成する必要があります。1 つはメニュー バー用、もう 1 つはコンテキスト メニュー用です。

簡単な方法は、メニュー生成コードを for ループに入れて、複数の同じメニューを作成することです。

QMenu を再利用する理由をお聞きしてもよろしいですか?

これが親チェーンにリンクされていることをテストできます: thisMenu is not a child of contextMenu

はい、それはドキュメントに記載されています。ある QMenu を別の QMenu に追加しても、親は変更されません: http://qt-project.org/doc/qt-5/QMenu.html#addMenu

contextMenu の子として作成すれば、すべて問題ありません。

ウィジェットの位置は、常にその親に相対的な位置に描画されます。(覚えておいてください: QMenu は QWidget です)

于 2014-09-23T06:40:06.030 に答える