【问题标题】:QAction::setShortcuts() only responds to the first shortcut in the listQAction::setShortcuts() 只响应列表中的第一个快捷方式
【发布时间】:2014-05-20 14:31:21
【问题描述】:

我希望 QAction 由多个键盘快捷键触发。根据文档,这应该可以通过将 QKeySequences 列表传递给 QAction::setShortcuts() 来实现,但实际上似乎只使用了列表中的第一个键序列。

我创建了一个简短的示例来演示该问题。在这里,我试图同时拥有 Meta+KCtrl+X (它们是 Alt +KCmd+X 在 Mac 上)触发“我的操作”。在这种形式下,只有 Meta+K 会触发动作。如果交换两个快捷键,使得 Ctrl+X 是第一个,那么它将触发动作和 Meta+K kbd> 不会。最后,如果所有快捷方式列表的内容都被注释掉并且带有 QKeySequence::Cut 的行被取消注释,那么只有 Ctrl+X 可以工作,即使the documentation says 它在 Mac 上映射到 Meta+KCtrl+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();
}

【问题讨论】:

    标签: macos qt


    【解决方案1】:

    OS X 不支持菜单项的多个键盘快捷键。QAction documentation 注释“调用此函数的结果将取决于当前运行的平台”。

    看起来根本原因是 OS X keeps the menu -> key shortcut mappings in a dictionary 将菜单文本作为键,将值作为单个键原子(不是任何类型的集合),因此每个菜单只能有一个活动键快捷方式一个项目。

    Here 一位用户发现,即使在本机应用程序中为同一个菜单项手动添加多个键盘快捷键也不起作用 - 只使用了第一个。

    【讨论】:

    • 谢谢,我怀疑这是特定于平台的事情,并注意到了 QAction 文档中的注释,但我不确定这是否是这里的问题。
    • 奇怪的是文档没有提到这一点。你会认为其他人现在会遇到它。
    • 我为此提交了一个 Qt 文档错误:bugreports.qt-project.org/browse/QTBUG-39127
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2013-08-15
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多