2017-05-10 12 views
0

QMenuBarにはQMenusがあります。例えば、QMenuのカスタムNon Altショートカット

QMenu* menu = myMainWindow->menubar()->addMenu(tr("Settings")); 

は今、私はアンパサンドを追加する場合、「&設定」と言う、私はALT + Sを使用して、このメニューを開くことができることを知っています。しかし、私のアプリケーションでは、カスタムキーの使用が必要です。さらに、私のアプリケーションでは、 "alt"キーも持っていません。カスタムキーのように、Qt :: Keyで未使用の場所(具体的には未知のキーとみなされる場所)をとり、イベント用に使用します。これは正常に正常に動作します。実際、このようなものは通常動作します:

int val = keyEvent->key(); 
if (key == MyCustomKeyEnum::CustomKey) 
    // do stuff 

しかし、カスタムのintキーショートカットを持つようにメニューを設定するにはどうすればよいですか?あるいは、同等の方法として、プログラム上でメニューバーからメニューを開くにはどうすればよいですか? MyCustomKeyEnum :: CustomKeyからカスタムスロットにイベントを簡単に接続できます。だから、おそらく私は潜在的に最初の場所でショートカットカスタムキーを避けることができますか?

私はtargetMenu.exec()を使用しようとしましたが、矢印キーを使用して隣接するメニューに移動し、正しい位置にメニューを生成できるようにしたいので、これは良い選択肢ではありませんでした。

答えて

0

ドキュメントを綿密にコーディネートした後、QMenuBar - setActiveActionに正しい機能が見つかりました。

残念ながら、APIを使用してメニュー名でアクションを簡単に選択する方法はありません。したがって、手動で行う必要があります。

for (QAction* act : menuBar()->actions()) 
{ 
    if (act->text() == tr("Settings")) 
    { 
     menuBar()->setActiveAction(act); 
    } 
} 

この関数自体は、キーボードイベントハンドラによって呼び出されます。

ただし、希望のメニューへのポインタがある場合は、menuAction()を呼び出すことができます。これははるかに簡単になります。

menuBar()->setActiveAction(mySettingsMenu->menuAction()); 

希望すると、自分自身のように、他の誰かが自分のように時間をずっと探していないことを願っています。

関連する問題