【发布时间】:2014-05-20 14:31:21
【问题描述】:
我希望 QAction 由多个键盘快捷键触发。根据文档,这应该可以通过将 QKeySequences 列表传递给 QAction::setShortcuts() 来实现,但实际上似乎只使用了列表中的第一个键序列。
我创建了一个简短的示例来演示该问题。在这里,我试图同时拥有 Meta+K 和 Ctrl+X (它们是 Alt +K 和 Cmd+X 在 Mac 上)触发“我的操作”。在这种形式下,只有 Meta+K 会触发动作。如果交换两个快捷键,使得 Ctrl+X 是第一个,那么它将触发动作和 Meta+K kbd> 不会。最后,如果所有快捷方式列表的内容都被注释掉并且带有 QKeySequence::Cut 的行被取消注释,那么只有 Ctrl+X 可以工作,即使the documentation says 它在 Mac 上映射到 Meta+K 和 Ctrl+X。代码:
#include "mainwindow.h"
#include <QMenuBar>
#include <QAction>
MainWindow::MainWindow() {
QMenu* menu = new QMenu("Menu");
menuBar()->addMenu(menu);
QAction* action = new QAction("My Action", this);
// Create a list with two shortcuts
QList<QKeySequence> shortcuts;
shortcuts.append(QKeySequence(Qt::META + Qt::Key_K));
shortcuts.append(QKeySequence(Qt::CTRL + Qt::Key_X));
action->setShortcuts(shortcuts);
// Alternatively, use one of the QKeySequence::StandardKey enums
//action->setShortcuts(QKeySequence::Cut);
connect(action, SIGNAL(triggered()), this, SLOT(doIt()));
menu->addAction(action);
}
// slot
void MainWindow::doIt() { qDebug("MainWindow::doIt()"); }
如果重要的话,我使用的是 Mac OS X 10.9.2,并且我已经在 Qt 5.2.1 和 Qt 5.3.0 上进行了尝试。
我包含了头文件和 main.cpp,以防有人只想复制粘贴来运行示例,但其中没有任何有趣或不标准的内容。头文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
public slots:
void doIt();
};
#endif // MAINWINDOW_H
main.cpp:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
【问题讨论】: