QMenuにQActionをインデックス指定で挿入
タイトルが分かりにくいですが、どういうことかというとQMenuのあるインデックスにQActionをインデックス指定で挿入するという意味です。
そんなの簡単にできそうに思えますが、リフェレンスを見るとQMenuにinsertという関数があるものの、この関数は次のようにインデックス指定できません。
QMenu::insertAction(QAction * before, QAction * action);
beforeというQActionの後に挿入したいアクションが挿入されるようです。
では、インデックス指定でアクション挿入したい場合はどうするかというと次のようにします。
/* あるインデックスにQActionを挿入する。**/ void insertActionAt(int index, QAction * action, QMenu * menu) { if(menu == 0) return; QListactions = menu->actions(); QAction * before = actions.value(index, 0); menu->insertAction(before, action); }
このような関数を作ってみました。
QMenuのactions関数はウィジェット内に含まれるすべてのQActionを返します。これにはセパレーター(区切り線)や子メニューなども含まれています。
あとは目的のインデックスのQActionを取得してinsertを実行するだけです。もしbeforeが0だった場合にはアクションはメニューの一番最後に追加されます。
以上、インデックス指定でQActionをQMenuに挿入する方法でした。では、また!
関連項目
メニューへのショートカットキーの設定
© Kaz