相同的键盘键充当两个相反操作的快捷方式
Same keyboard key to act as a shortcut for two opposite actions
我正在使用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;
}
}
*我的类可以是任何类。
相关文章:
- 如何使用位操作在单个整数中编码和解码两个数字
- C++ 两个函数除了一行之外执行相同的操作
- C++为什么不可能将这两个操作合并在一行中?
- 两个 UShorts 之间的操作在 VC2015 中给出了一个 int
- 在Win32管道上将两个缓冲区合并为一个写操作
- 如何操纵两个具有算术操作的参数的结果
- 如何编写两个初始化操作(一个作为默认初始化,另一个作为用户输入)?两者都是类的构造函数C++
- Qt - 解决一个插槽上的两个顺序调用,并且仅执行一次操作
- 对两个没有友元函数的类进行私有操作
- 我可以在两个istream_iterators之间执行分配操作吗?
- 写入和读取操作:使用一个 wrlock 两个 VS 一个 rdlock 读取操作和一个 wrlock 写入操作
- 两个左移操作得到了不同的答案
- 相同的键盘键充当两个相反操作的快捷方式
- 为什么我的 c++ 计算器每减去我输入的两个数字,而不是执行我要求它执行的操作
- 为什么以下两个程序产生不同的输出?(C++,位操作,VS 2012)
- 为什么当我使用 boost::bind 时,boost::spirit::qi 语义操作不能使用两个参数?
- 如何合并两个代码几乎相同但在不同结构上操作的类
- 需要一种同步两个操作的方法
- 当在C++中的两个对象之间操作AND运算符时,它做什么
- 在c++中,如果返回一个指针并立即解引用,这两个操作会被优化掉吗?