相同的键盘键作为两个相反操作的快捷方式

时间:2016-02-22 08:42:34

标签: c++ qt shortcut

我正在使用C ++ / Qt 5.5,在我的软件中,我希望Qt :: Key_Space触发菜单的打开,并使用相同的按钮触发相同菜单的关闭。问题是,如果我实现它:

this->button = new QPushButton();
this->button->setShortcut( QKeySequence( Qt::Key_Space ) );
connect(this->button, &QPushButton::clicked, this, &MenuClass::startMenuButtonClicked);

...

    this->in_menu_button = new QPushButton();
    this->in_menu_button->setShortcut( QKeySequence( Qt::Key_Space ) );
    connect(this->in_menu_button, &QPushButton::clicked, this, &InTheMenuClass::startMenuButtonClicked);

如果我这样做,只有一种方式可以使用菜单。您对如何解决这个问题有任何想法吗?

2 个答案:

答案 0 :(得分:1)

您只需创建一个按钮并为其指定快捷方式。然后根据菜单的状态(打开/关闭)在按钮的处理程序中执行相反的操作。

答案 1 :(得分:0)

我用状态机解决了它。我用2个状态创建了一个enumaration并创建了一个静态实例。

public:
    enum STATE {MAIN_WINDOW, MENU};
    static STATE state;

然后,我默认初始化它以具有MAIN_WINDOW状态。

MyClass::STATE MyClass::state = STATE::MAIN_WINDOW;

然后,我连接两个按钮的快捷方式的两个插槽,以调用相同的插槽,检查并设置当前状态。

QShortcut * shortcut = new QShortcut( QKeySequence( Qt::Key_Space ), back_to_main );
connect( shortcut, &QShortcut::activated, this, &MyClass::checkState);

QShortcut * shortcut = new QShortcut( QKeySequence( Qt::Key_Space ), go_to_menu );
connect( shortcut, &QShortcut::activated, this, &MyClass::checkState);

void MyClass::checkState()
{
    if (MyClass::state == MyClass::MAIN_WINDOW )
    {
        MyClass::goToMenu();
        MyClass::state = MyClass::STATE::MENU;
    }
    else if ( MyClass::state == MyClass::MENU )
    {
        MyClass::goBackToMain();
        MyClass::state = MyClass::STATE::MAIN_APP;
    }
}

* MyClass可以是任何类。