QMenuにQActionをインデックス指定で挿入

タイトルが分かりにくいですが、どういうことかというとQMenuのあるインデックスにQActionインデックス指定で挿入するという意味です。

そんなの簡単にできそうに思えますが、リフェレンスを見るとQMenuinsertという関数があるものの、この関数は次のようにインデックス指定できません。

QMenu::insertAction(QAction * before, QAction * action);

beforeというQActionの後に挿入したいアクションが挿入されるようです。

では、インデックス指定でアクション挿入したい場合はどうするかというと次のようにします。

/* あるインデックスにQActionを挿入する。**/
void insertActionAt(int index, QAction * action, QMenu * menu)
{
    if(menu == 0) return;

    QList actions = menu->actions();
    QAction * before = actions.value(index, 0);
    menu->insertAction(before, action);
}

このような関数を作ってみました。

QMenuactions関数はウィジェット内に含まれるすべてのQActionを返します。これにはセパレーター(区切り線)や子メニューなども含まれています。

あとは目的のインデックスのQActionを取得してinsertを実行するだけです。もしbeforeが0だった場合にはアクションはメニューの一番最後に追加されます。

以上、インデックス指定でQActionQMenuに挿入する方法でした。では、また!

関連項目
  • メニューへのショートカットキーの設定
  • プライバシーポリシー