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

Same keyboard key to act as a shortcut for two opposite actions

本文关键字:两个 操作 快捷方式 键盘      更新时间:2023-10-16

我正在使用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 个状态的 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;
    }
}

*我的类可以是任何类。