找回密码
 立即注册
收起左侧

两个窗体间发送key事件不响应

1
回复
3852
查看
[复制链接]
累计签到:4 天
连续签到:1 天
来源: 2015-7-24 22:55:06 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 yyywill 于 2015-7-24 22:56 编辑

程序运行创建了两个窗体form1和form2,form2上有3个private的button1、button2、button3。
在form1用定时器一秒向form2发送Qt::Key_Left,使form2上的3个button间循环切换焦点。
form2在前台active,且form2显示时3个button至少有一个是获取焦点状态。

form1的程序

  1.     QKeyEvent myEvent(QKeyEvent(QEvent::KeyPress, Qt::Key_Left,Qt::NoModifier));
  2.     QApplication::sendEvent((QObject *)form2, &myEvent); //这里只能发给form2,不能发给它的button
复制代码
这样form2在active的情况下,三个button间并没有发生焦点切换。

但是如果form2在增加如下程序:
  1. void form2::keyPressEvent(QKeyEvent *event)
  2. {
  3.     if(event->key() == Qt::Key_Left)
  4.     {
  5.         QApplication::sendEvent((QObject *)button2, event); //这里任意一个button
  6.     }
  7. }
复制代码
三个button就会循环切换焦点。且把keypress事件只要发给任意一个button就可以。

就想问一下,form2里必须要作这个操作吗??为什么事件不能直接传递给form2上当前获取焦点的button呢?





回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-7-26 15:42:41 显示全部楼层
yafeilinux,说好了有问必答呢?
QT Creator 快速入门第2版 119页,6.3键盘事件讲的,“当键盘按键被按下或者被释放时,键盘事件便会被发送给拥有键盘输入焦点的部件。
现在form1发送一个keypress给form2,为什么form2上拥有输入焦点的button确收到不呢?你给说说
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了