Qt将非菜单键盘快捷键添加到QMainWindow

时间:2014-11-22 06:26:56

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

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

这不起作用,所以如果快捷方式必须工作,我想这个动作是不可见的。所以我把它添加到主窗口,但它们仍无法正常工作。任何想法,我如何使它工作?这是我的代码。无论需要发生什么,方法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

}

2 个答案:

答案 0 :(得分:4)

我测试了这段代码并且工作正常:

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

请勿将QAction添加到menuBar。

答案 1 :(得分:0)

您可以使用QShortcut并将密钥,目标小部件和相关插槽作为参数传递给它的构造函数。只需将其放在MyWidget

的构造函数中
QShortcut * shortcut = new QShortcut(QKeySequence(Qt::Key_Right),this,SLOT(someMethod()));
shortcut->setAutoRepeat(false);