• 2683阅读
  • 2回复

[提问]一个对话框,如何检测到光标键? [复制链接]

上一主题 下一主题
离线qazaq408
 

只看楼主 倒序阅读 楼主  发表于: 2017-10-23
比如一个对话框,上面包含了2个按钮,类似这样


然后在对话框的按键事件里有
  1. void GetCursorKey::keyPressEvent(QKeyEvent* event)
  2. {
  3.     if(event->key() == Qt::Key_Up)
  4.         qDebug()<<"up";
  5.     if(event->key() == Qt::Key_Down)
  6.         qDebug()<<"Down";
  7.     QDialog::keyPressEvent(event);
  8. }
程序运行后按键盘光标的上下键,没有输出,也就是说没有检测到光标键
然后如果我把对话框上的两个按钮全部设为不接受光标,既
  1. A_PushButton->setFocusPolicy(Qt::NoFocus);
  2. B_PushButton->setFocusPolicy(Qt::NoFocus);

在运行时,按光标上下键,就有输出,既可以检测到光标键,然后我进一步测试,发现上面只有有一个子控件可以接受光标,就无法在对话框的按键事件
里检测到光标键,必须把对话框上的全部子控件都谁为无法接受光标,才能在对话框里检测到光标键
然后实际的情况是,我先在的程序上面的子控件有需要接受光标,不能把他们全部设为不接受光标事件,所以我想问下有没有办法检测到光标键

另外我试了一下重写 bool QDialog::event(QEvent* event);发现在这个函数里检测和在按键事件里检测结果是一样的

离线青空飞羽

只看该作者 1楼 发表于: 2017-10-23
你可以看看这个void QWidget::setFocusProxy(QWidget * w)的API文档
离线小韩老师

只看该作者 2楼 发表于: 2017-10-24
这个是因为你的焦点设置在了在了按钮上,你需要在你的GetCursorKey类中设置焦点,比如说是setFocusPolicy(Qt::clickfocus);随便点击空白区域就将焦点切换到了对话框上,你的函数就可以进来了
快速回复
限100 字节
 
上一个 下一个