QT之用键盘按钮显示菜单栏子目录
运行之后的效果图如下:
其实实现的原理很简单,在网上查了一天的资料,也没有结果,因为 QMenu 无法设置 setShortcut() 效果,QWidget::keyPressEvent ( QKeyEvent* k ) 与 QWidget::keyReleaseEvent ( QKeyEvent* k ) 两个函数应该能实现,但是它会将字符按键输入到输入框中,这和预期效果残生和很大的差异,不可行,最后我想到了一种可能性——通过 connect() 信号卡槽的传递性来实现,就是将菜单中的一个子目录给隐藏掉的,然后给该子目录设置 setShortcut() 效果,最后用 connect() 信号卡槽函数将 QMenu 与 QAction 关联起来,这样应该可以达到实验目的,于是就成功了,并且还不需要用 connect() 信号卡槽来关联,实现步骤如下:
(1) 先 new 一个 QAction 对象来实现 setShortcut() 按键效果
m_showOptionMenuAction = new QAction(QStringLiteral(""));
(2) 然后,将该 QAction 对象设置为不可见
m_showOptionMenuAction ->setVisible(false);
(3) 接着,用 setShortcut() 给该 QAction 对象添加按键效果
m_showOptionMenuAction -> setShortcut(Qt::ALT | Qt::Key_O);
(4) 最后,将该 QAction 对象添加到 QMenu 对象上即可
m_optionMenu -> addAction(m_showOptionMenuAction);
注: 无需使用 connect() 函数来关联该 QAction 对象即可实现按键响应效果,亲测有效。
以下是部分源码,可以参考:
学习分享,一起成长!接触QT的时间不长,大概只有一个多月,有不足之处,欢迎大佬指出来,我会进行更正。