【问题标题】:Qt adding non-menubar keyboard shortcut to QMainWindowQt 向 QMainWindow 添加非菜单栏键盘快捷键
【发布时间】:2014-11-22 06:26:56
【问题描述】:

我有一个扩展 QMainWindow 的自定义小部件。我在菜单栏中添加了一些QActions,以及每个的键盘快捷键,它们工作正常。现在我想从菜单栏中删除其中一些操作,但我想保持启用快捷方式(用户可以从 帮助 对话框了解快捷方式的可用性)。所以首先我决定让这些动作不可见。

那没有用,所以我猜如果快捷方式必须工作,该操作就不会是不可见的。所以我将它添加到主窗口,但它们仍然无法正常工作。任何想法,我该如何让它工作?这是我的代码。方法someMethod 中有任何需要发生的事情。

class MyWidget: public QMainWindow {
    public:
        MyWidget();

};

MyWidget::MyWidget() {
    QAction *myAct = new QAction(tr("&Some Text"), this);
    fNextmyActPageAct->setShortcut(QKeySequence(Qt::Key_Right));
    myAct->setVisible(false); //adding this does not work
    connect(myAct, SIGNAL(triggered()), this, SLOT(someMethod()));

    ...

    QMenu *someMenu = menuBar()->addMenu(tr("&Some Menu"));
    someMenu->addAction(myAct); //this works, the option shows up in the menu 'Some Menu' and the shortcut works
    this->addAction(myAct); //does not work

}

【问题讨论】:

    标签: c++ qt keyboard-shortcuts qmainwindow qmenubar


    【解决方案1】:

    我测试了这段代码,它工作正常:

    QAction* myAct = new QAction(this);
    myAct->setShortcut(Qt::Key_Right);
    connect(myAct, SIGNAL(triggered()), this, SLOT(someMethod()));
    this->addAction(myAct);
    

    不要将QAction 添加到您的菜单栏。

    【讨论】:

    • 嗯,不,它不起作用。而且我没想到,你做的和我没什么不同。
    • 我测试了这段代码,我确信这样可以正常工作。仅在新项目中使用这 4 行进行测试。
    • 我用过这个。你和我的代码唯一的区别是你没有在初始化时添加文本,而是直接使用了快捷方式而不是用QkeySequence包裹它。两者都不应该有任何区别。我还是试过了,还是不行。
    • 没有代码没有明确地将焦点设置在小部件上,我在单击小部件后尝试使用快捷方式。所以点击应该自然地将焦点转移到小部件上,仍然不起作用。
    • @Cupidvogel 对不起,但我不得不问:您是否将 someMethod() 定义为公共 SLOT?
    【解决方案2】:

    您可以使用QShortcut 并将密钥、目标小部件和相关插槽作为参数传递给它的构造函数。把这个放在MyWidget的构造函数中:

    QShortcut * shortcut = new QShortcut(QKeySequence(Qt::Key_Right),this,SLOT(someMethod()));
    shortcut->setAutoRepeat(false);
    

    【讨论】:

    • 这对我有用。可能是因为您也使用相同的键进行操作。尝试更改键以查看是否有效或删除该操作的快捷键。
    • 不,完全注释掉了动作部分,仍然无法正常工作。我被诅咒了.. :(
    • 您的小部件应该集中在快捷方式上以执行操作。按键时你的小部件有焦点吗?
    • 我还没有编写任何代码来在显式单击时将焦点设置在小部件上。我需要这样做吗?我认为单击小部件会自动将焦点设置在小部件上。那我该怎么做呢?
    • 如果你点击小部件,它就会获得焦点。
    猜你喜欢
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2017-06-24
    • 1970-01-01
    • 2016-12-02
    相关资源
    最近更新 更多