5

私は典型的なQMenuでQActionsを使用しています

| &New file     Ctrl+N |
| &Open file    Ctrl+O |

メニューが開いている間、単純に N (New File) と O (Open File) の便利なコンテキスト ショートカットを取得します。

最近のファイルを一覧表示するために、次のようなことをしたいと思います。

| [A recent file]          Ctrl+1  |
| [Another recent file]    Ctrl+2  |
 ... etc

ニーモニック/コンテキスト ショートカットをそれぞれ 1 と 2 に設定するとよいでしょう。この番号をテキスト フィールドに含める必要はありません。

| &1. [A recent file]          Ctrl+1  |
| &2. [Another recent file]    Ctrl+2  |

誰かがこれを行う方法を知っているか、見つける方向に私を向けることができれば、私は幸せです. いくつかのドキュメントを調べましたが、QActions のニーモニック ショートカットを設定するためのアンパサンドと同等の方法の使用についての言及はあまり見つかりません。

ありがとう。

PS: Qt-4.7.4-rh6-x86_64、C++

4

2 に答える 2

3

メニューのコンテキストでのみ有効なショートカットを作成できます。

QAction * recentFileAction = new QAction( tr("A recent file"), this );
recentFileAction->setShortcut( QKeySequence( tr("Ctrl+1") ) );

QMenu * tools = menuBar()->addMenu( tr("&Tools") );

// Add a shortcut valid only when the tools menu has focus
QShortcut * recentFileShortcut = new QShortcut( QKeySequence( tr("1") ), tools );
recentFileShortcut->setContext( Qt::WidgetShortcut );

connect( recentFileShortcut, SIGNAL(activated()),
         recentFileAction,   SLOT(trigger()));

Qt::StrongFocusキーボード入力を受け入れるように、メニューのフォーカスポリシーをに設定する必要がある場合があります。

于 2012-02-02T11:04:10.913 に答える
1

追記:

  • Qt-4.6.3-rh5-x86_64 と Qt-4.6.4-win32 をそれぞれ使用して、Linux / Windows での動作をテストおよび確認しました。
  • Kamil Klimek が Mac OS X で動作しないことをテストし、報告しました。

これが Qt の意図した機能の一部なのか、それとも単なるハックなのか、完全にはわかりません。ドキュメントが見つからないということは後者をほのめかしていますが、それがとてもうまく機能していることは前者を示唆しています。あなたが裁判官になり、私/私たちに知らせてください.

通常の使用法は次のとおりです。

// Existing: QMenu* fileMenu_
QAction* action = new QAction("Recent file name", fileMenu_)
action->setShortcut(QKeySequence(QString("CTRL+").append(QString::number(1))));
fileMenu_->addAction(action);

どうやら、Qt はファイル メニューを 2 つの列を持つテーブルとして表示します。デフォルトの動作では、左側の列にラベル (名前) が表示され、右側の列に書式設定されたショートカット キーが表示されます。

| Recent file name      Ctrl+1 |

これは、エスケープされたタブを使用して簡単にカスタマイズできます。そのような使用:

QAction* action = new QAction("Some text\tOther text", fileMenu_)
action->setShortcut(QKeySequence(QString("CTRL+").append(QString::number(1))));

結果は

| Some text       Other text |

焦点が合っていないときは、デフォルトの Ctrl+1 ショートカットを引き続き保持します。これは解決策につながります:

QAction* action = new QAction(QString("Recent file name\tCtrl+&%1").arg(i)), fileMenu_)
action->setShortcut(QKeySequence(QString("CTRL+").append(QString::number(i))));

変数iは、最近のファイルのインデックスを示します。これはまさに私が考えていたものを作成し、数字の下にアンダースコアも表示します。これはニーモニックのショートカットをうまく示しています。

アップデート

最終結果を示すために、混乱が生じた場合に備えていくつかの画像を追加しました。

Qtが右側の列にショートカットを入力できるようにします(質問する前に持っていたもので、かなり標準的です):

右側の列を手動で入力し、ニーモニックも追加した後:

ニーモニックを示す下線を除いて、私には同じように見えます。

于 2012-02-03T14:26:52.743 に答える