嵌入式Qt非一般功能按键的实现
嵌入式Qt特殊功能按键的实现
求助,我要做的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所在菜单下,无法回到主界面上来,或者切换到其他按键上!!
求各位大神指导,是我思路有问题吗?或者有改进方法,使界面更人性化,甚至可以使得上拉菜单按钮实现按一次弹出,再按一次就收回这种情况,谢谢!
------解决方案--------------------
setupMenu.exec(ui.setupBtn.mapToGlobal(pos));
你执行了这句,就是阻塞了,程序就阻塞在这个地方了,直到你的菜单退出了,程序才会从这个函数返回,所以按下F1之后,程序就阻塞在了那个地方,你后面按F2当然没反应了。
------解决方案--------------------
可以通过给你的菜单设置快捷键来实现。
------解决方案--------------------
你应该做驱动开发
------解决方案--------------------
那我也没辙。
如果是我:我只能这样做了: 不用菜单了,当按下F1,弹出的是对话框,这样就能实现了,
所以建议楼主把菜单改成对话框好了。
------解决方案--------------------
exec是阻塞的方式
------解决方案--------------------
如果不执行setupMenu.exec(ui.setupBtn.mapToGlobal(pos));
是不是每次都可以响应呢?
------解决方案--------------------
嗯 有道理
求助,我要做的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所在菜单下,无法回到主界面上来,或者切换到其他按键上!!
求各位大神指导,是我思路有问题吗?或者有改进方法,使界面更人性化,甚至可以使得上拉菜单按钮实现按一次弹出,再按一次就收回这种情况,谢谢!
------解决方案--------------------
setupMenu.exec(ui.setupBtn.mapToGlobal(pos));
你执行了这句,就是阻塞了,程序就阻塞在这个地方了,直到你的菜单退出了,程序才会从这个函数返回,所以按下F1之后,程序就阻塞在了那个地方,你后面按F2当然没反应了。
------解决方案--------------------
可以通过给你的菜单设置快捷键来实现。
------解决方案--------------------
你应该做驱动开发
------解决方案--------------------
那我也没辙。
如果是我:我只能这样做了: 不用菜单了,当按下F1,弹出的是对话框,这样就能实现了,
所以建议楼主把菜单改成对话框好了。
------解决方案--------------------
exec是阻塞的方式
------解决方案--------------------
如果不执行setupMenu.exec(ui.setupBtn.mapToGlobal(pos));
是不是每次都可以响应呢?
------解决方案--------------------
嗯 有道理