嵌入式Qt特殊功能按键的实现

dengdeng1109 2012-12-27 10:29:17
求助,我要做的Qt应用软件是基于嵌入式平台的,界面上有几个特殊的功能按键,在界面的底部,想实现click触发后向上弹出菜单,现在的问题是:没有鼠标、也不是触摸屏,现在不知道该如何实现键盘响应了。
我现在的想法是:当功能键被按下,发送键盘信息给Qt,Qt把它当F1之类的键值处理
void MyMainDialog::keyPressEvent(QKeyEvent *event)
{
switch(event.key())
{
case Qt::Key_F1:
setupBtn_clicked();
break;
case Qt::Key_F2:
....
break;
....
}
}
其中,setupBtn_clicked()函数实现菜单向上弹出,
void MyMainDialog::setupBtn_clicked()
{
QPoint pos;
pos.setX(0);
pos.setY(-setupMenu.sizeHint().height());
setupMenu.exec(ui.setupBtn.mapToGlobal(pos));
}
具体的菜单实现我就不写了。。。
这样做之后,在主机上做了下试验,按下F1,确实会响应,也可以进入上拉菜单进行下一步操作,
但如果按过F1之后,如果再按F2、F3之类的就没有反应了,似乎是焦点一直在F1所在菜单下,无法回到主界面上来,或者切换到其他按键上!!
求各位大神指导,是我思路有问题吗?或者有改进方法,使界面更人性化,甚至可以使得上拉菜单按钮实现按一次弹出,再按一次就收回这种情况,谢谢!
...全文
870 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengdeng1109 2013-01-12
  • 打赏
  • 举报
回复
结贴咯。。。找到方法解决这个问题呢,我添加了一个按键,映射成ESCAPE。。。O(∩_∩)O哈哈~,谢谢各位的帮助
dengdeng1109 2013-01-02
  • 打赏
  • 举报
回复
就没有人遇到过类似的情况吗?求救啊!!!!!
dengdeng1109 2012-12-29
  • 打赏
  • 举报
回复
帮自己顶下。。。不要沉了~~还是没解决,求各位帮忙
MarsZ 2012-12-29
  • 打赏
  • 举报
回复
引用 15 楼 SilenceSu 的回复:
引用 14 楼 dengdeng1109 的回复:恩啊。。。我把这句删了,改成打印信息,都可以响应啊 引用 13 楼 SilenceSu 的回复:如果不执行setupMenu.exec(ui.setupBtn.mapToGlobal(pos)); 是不是每次都可以响应呢? 那肯定就是你那个菜单阻塞了,你可以换成其他方式。比如说用指针然后setupMenu->……
嗯 有道理
雲天之巔 2012-12-28
  • 打赏
  • 举报
回复
引用 4 楼 qq214517703 的回复:
貌似直接把 exec 这个改成 show就好了。
你要先把setupMenu改成全局的 或者使用New出来的 然后用show理论上市可行的。 楼主试一下 看看吧。
雲天之巔 2012-12-28
  • 打赏
  • 举报
回复
貌似直接把 exec 这个改成 show就好了。
雲天之巔 2012-12-28
  • 打赏
  • 举报
回复
引用 2 楼 dengdeng1109 的回复:
那我该怎么做呢。。。想不到方法啊~~ 引用 1 楼 qq214517703 的回复:setupMenu.exec(ui.setupBtn.mapToGlobal(pos)); 你执行了这句,就是阻塞了,程序就阻塞在这个地方了,直到你的菜单退出了,程序才会从这个函数返回,所以按下F1之后,程序就阻塞在了那个地方,你后面按F2当然没反应了。
可以通过给你的菜单设置快捷键来实现。
dengdeng1109 2012-12-28
  • 打赏
  • 举报
回复
那我该怎么做呢。。。想不到方法啊~~
引用 1 楼 qq214517703 的回复:
setupMenu.exec(ui.setupBtn.mapToGlobal(pos)); 你执行了这句,就是阻塞了,程序就阻塞在这个地方了,直到你的菜单退出了,程序才会从这个函数返回,所以按下F1之后,程序就阻塞在了那个地方,你后面按F2当然没反应了。
雲天之巔 2012-12-28
  • 打赏
  • 举报
回复
setupMenu.exec(ui.setupBtn.mapToGlobal(pos)); 你执行了这句,就是阻塞了,程序就阻塞在这个地方了,直到你的菜单退出了,程序才会从这个函数返回,所以按下F1之后,程序就阻塞在了那个地方,你后面按F2当然没反应了。
dengdeng1109 2012-12-28
  • 打赏
  • 举报
回复
试了下show,且不考虑显示位置问题,貌似show之后也不能响应其他按键,也就是说不管怎样,一旦菜单弹出,其他键就响应不了
引用 15 楼 SilenceSu 的回复:
引用 14 楼 dengdeng1109 的回复: 恩啊。。。我把这句删了,改成打印信息,都可以响应啊 引用 13 楼 SilenceSu 的回复:如果不执行setupMenu.exec(ui.setupBtn.mapToGlobal(pos)); 是不是每次都可以响应呢? 那肯定就是你那个菜单阻塞了,你可以换成其他方式。比如说用指针然后setupMenu->show();
SilenceSu 2012-12-28
  • 打赏
  • 举报
回复
引用 14 楼 dengdeng1109 的回复:
恩啊。。。我把这句删了,改成打印信息,都可以响应啊 引用 13 楼 SilenceSu 的回复:如果不执行setupMenu.exec(ui.setupBtn.mapToGlobal(pos)); 是不是每次都可以响应呢?
那肯定就是你那个菜单阻塞了,你可以换成其他方式。比如说用指针然后setupMenu->show();
dengdeng1109 2012-12-28
  • 打赏
  • 举报
回复
恩啊。。。我把这句删了,改成打印信息,都可以响应啊
引用 13 楼 SilenceSu 的回复:
如果不执行setupMenu.exec(ui.setupBtn.mapToGlobal(pos)); 是不是每次都可以响应呢?
SilenceSu 2012-12-28
  • 打赏
  • 举报
回复
如果不执行setupMenu.exec(ui.setupBtn.mapToGlobal(pos)); 是不是每次都可以响应呢?
dengdeng1109 2012-12-28
  • 打赏
  • 举报
回复
看到说可以把exec()改成popup(),试了下也没反应
引用 10 楼 SilenceSu 的回复:
exec是阻塞的方式
dengdeng1109 2012-12-28
  • 打赏
  • 举报
回复
5555555555555,我也很郁闷啊。。。但是菜单下内容多,如果全改成对话框。。。太多了!我继续纠结,先谢谢啦~
引用 9 楼 qq214517703 的回复:
引用 6 楼 dengdeng1109 的回复: 我试了下设置快捷键,效果和之前一样,至于show,show没法带参数啊!菜单又实现不了了。。。 引用 5 楼 qq214517703 的回复:引用 4 楼 qq214517703 的回复: 貌似直接把 exec 这个改成 show就好了。 你要先把setupMenu改成全局的 或者使用New出来的 然后用show理论上市可行的。 楼……
SilenceSu 2012-12-28
  • 打赏
  • 举报
回复
exec是阻塞的方式
雲天之巔 2012-12-28
  • 打赏
  • 举报
回复
引用 6 楼 dengdeng1109 的回复:
我试了下设置快捷键,效果和之前一样,至于show,show没法带参数啊!菜单又实现不了了。。。 引用 5 楼 qq214517703 的回复:引用 4 楼 qq214517703 的回复: 貌似直接把 exec 这个改成 show就好了。 你要先把setupMenu改成全局的 或者使用New出来的 然后用show理论上市可行的。 楼主试一下 看看吧。 ……
那我也没辙。 如果是我:我只能这样做了: 不用菜单了,当按下F1,弹出的是对话框,这样就能实现了, 所以建议楼主把菜单改成对话框好了。
dengdeng1109 2012-12-28
  • 打赏
  • 举报
回复
额。。。不至于吧,应该只是Qt层面上的啊
引用 7 楼 ao834391367 的回复:
你应该做驱动开发
  • 打赏
  • 举报
回复
你应该做驱动开发
dengdeng1109 2012-12-28
  • 打赏
  • 举报
回复
我试了下设置快捷键,效果和之前一样,至于show,show没法带参数啊!菜单又实现不了了。。。
引用 5 楼 qq214517703 的回复:
引用 4 楼 qq214517703 的回复: 貌似直接把 exec 这个改成 show就好了。 你要先把setupMenu改成全局的 或者使用New出来的 然后用show理论上市可行的。 楼主试一下 看看吧。

21,489

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧