我在QMenu中使用QActions,这是典型的
| &New file Ctrl+N |
| &Open file Ctrl+O |
当菜单打开时,它可以获得简单的N(对于新文件)和O(对于打开文件)的上下文快捷方式。
我想做一些类似的事情来列出最近的文件,即:
| [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 ++
答案 0 :(得分:3)
您只能在菜单的上下文中创建shortcut有效:
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
,以便接受键盘输入。
答案 1 :(得分:1)
发表-说明:强>
我不完全确定这是否是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将文件菜单填充为具有两列的表。默认行为是在左栏上有标签(名称),在右栏上有格式化的快捷键。
| 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使用快捷方式填充右列(我在提出问题之前所拥有的,非常标准):
手动填充右列后,还添加助记符:
除了表示助记符的下划线外,对我来说看起来相同。