Qtに、ポップアップメニューがアタッチされたQActionsまたはQToolbarButtonsのいずれかを含むツールバーが必要です。 QMenuを作成し、それをQToolbarButtonに追加してから、それをQToolbarに追加することで、コードでこれを完全に行うことができました。私の問題は、これは完全にデザイナーで実行できるはずだということです。
これは私がコードを介して行ったことです。qtデザイナーでボタンとメニューを定義したいと思います。
Qtデザイナーでやりたいのは、コードをインターフェースから分離することです。たとえば、これは、1人の人がフォームの外観とコンポーネントを設計し、プログラマーがこれを取得してその背後にある機能をコーディングできることを意味します。ツールバーとメニューをプログラマーが設計する必要がある場合、これを非常に効果的に達成することはできません。
これは多くのアプリケーションでかなり一般的な要件のようであり、Qtがデザイナーではなくコードでこれを強制する方法がわかりません。
これがどのように行われるかについて誰かが何か考えを持っているなら、多分私はQtで何かを逃していますか?
Qt Designerでのツールバーのサポートは、少し直感的でなく、制限されているようです。ドロップダウンアクションを含むポップアップメニューをQtDesignerのツールバーに直接追加する方法がわかりません。
次のようにプッシュボタンを追加できます。まず、メインウィンドウを右クリックして、[ツールバーを追加]を選択します(まだ持っていない場合)。これにより、メインウィンドウの上部に非常にスリムなツールバーが追加されます(空であるためスリムです)。
次に、アクションエディタでアクションを追加します。これはQtDesignerのペインの1つです。表示されない場合は、[表示]-> [アクションエディター]を選択します。ここで新しいアクションを作成できます。
次に、アクションをツールバーにドラッグして、アクションをトリガーするプッシュボタンをツールバーに入力します。
ポップアップメニューが必要だったのは知っていますが、私が知る限り、それはQtDesignerでできることの範囲です。 いくつかその他 同じ結論に達したようです。
これには厄介なトリックがあります。 QtDesignerの特別なQWidget
(またはQFrame
)に目的のウィジェットを配置し、そのウィジェットをコードのツールバーに追加できます。
QMyToolbarItem
(またはそれに適したもの)から派生した、たとえばQWidget
という名前の新しいQtクラスをプロジェクトに追加します。次に、QtデザイナでQMyToolbarItem.ui
を開きます。複雑なウィジェットを追加します。ポップアップメニューには、QComboBox
またはポップアッププッシュボタンを使用できます。 (これは厄介だとすでに述べました)。それを保存。コードでは、カスタムウィジェットをQMainWindow
のツールバーに追加するだけです。
ui.mainToolBar->addWidget(new QMyToolbarItem(this));
QMyToolbarItem
のサイズポリシーを適切に設定することを忘れないでください(たとえば、minimumSize
のQMyToolbarItem
を目的の値に設定します)。それ以外の場合、ツールバーには何も表示されません。
もちろん、これは通常のアイテムをツールバーに追加したくない場合にのみ問題ありません。そうすることで、QActionモデルの大きな力が失われることに注意してください。
とにかく、それはUI設計のものをコードから十分に分離し、ツールバーの複雑なウィジェット設計に対して優れた力を与えます。
最後に、UIロジックを基盤となるビジネスロジックから効率的に分離するために、適切な モデルビューパターン を検討することを忘れないでください。