Qtのでは、どのメニューにキーボードショートカットを示すが、それらを無効にするには?
-
19-09-2019 - |
質問
私は私のメインウィンドウのメニューにQAction
sの束を追加しています。例えば、これらのアクションは、キーボードによってトリガすることができ、私はショートカットがいつものように、メニューに表示されるようにしたいです
-----------------
|Copy Ctrl+C|
-----------------
私はQAction.setShortcut()
を使ってこれを行うことができます。しかし、私はのこれらのQAction
sはショートカットによってトリガされるのしたくありません。私は別に他の場所ですべてのキーボード入力を処理しています。
これは可能ですか?私はQActionにショートカットを無効にするが、それでも私のメニューのショートカットテキストを(この例では、 Ctrlキー + C )ことはできますか?
編集:私はそれをやってしまった方法は、メニューのaboutToShow()
とaboutToHide()
イベントに接続し、そして彼らは、メニューが表示されている場合にのみ有効ですので、ショートカットを有効化/無効化されます。しかし、私はクリーンなソリューションをいただければと思います...
解決
あなたはQActionから継承し、オーバーライドすることができますQAction ::イベント(QEvent *):
class TriggerlessShortcutAction : public QAction
{
public:
...ctors...
protected:
virtual bool event(QEvent* e)
{
if (e->type() == QEvent::Shortcut)
return true;
else
return QAction::event(e);
}
};
これは、型QEventのいずれかのイベントが発生します::ショートカットは、「トリガー()」信号をトリガしないようにあなたの行動に送信されます。
他のヒント
action.setText("Copy\tCtrl+C");
このショートカットとアクションのように見えますが、ショートカットが実際にインストールされていません。
ここでは完全な例である:
#include <QtGui>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QMainWindow win;
QMenu *menu = win.menuBar()->addMenu("Test");
// This action will show Ctrl+T but will not trigger when Ctrl+T is typed.
QAction *testAction = new QAction("Test\tCtrl+T", &win);
app.connect(testAction, SIGNAL(triggered(bool)), SLOT(quit()));
menu->addAction(testAction);
// This action will show Ctrl+K and will trigger when Ctrl+K is typed.
QAction *quitAction = new QAction("Quit", &win);
quitAction->setShortcut(Qt::ControlModifier + Qt::Key_K);
app.connect(quitAction, SIGNAL(triggered(bool)), SLOT(quit()));
menu->addAction(quitAction);
win.show();
return app.exec();
}
所属していません StackOverflow