问题描述:
1、程序的QDialog窗口按下回车竟然关闭了,感觉跟奇怪,不知道为什么。
2、最后想要通过重写QDialog的keyPressEvent屏蔽调回车键,结果Return和Enter傻傻分不清楚。
3、Return和Enter搞清楚了之后发现键盘事件竟然接收不到回车键。
这就一个问题引出来另外两个问题了,最后才傻傻的搞清楚。
解释(让我们倒着解释):
关于问题3的解释:
因为QDialog中存在控件的focusPolicy是Qt::StrongFocus,不光导致QDialog的键盘事件接受不到回车键,方向键也接收不到。
关于问题3的解决方案:
QDialog初始化时,设置:
setFocusPolicy(Qt::StrongFocus);
关于问题2的解释:
大键盘上的回车键是Qt::Key_Return;
小键盘上的回车键是Qt::Key_Enter;
关于问题2的解决方案:
判断正确就好了。
关于问题1的解释:
因为QDialog的窗口中有一个QPushButton,该按钮的点击信号槽连接到窗口关闭操作,而且该按钮的focusPolicy是Qt::StrongFocus。正是因为这哥focusPolicy和该按钮连接的信号槽导致了回车关闭。
关于问题1的解决方案:
- QDialog弹出时把QPushButton的focusPolicy设置为Qt::NoFocus。
- 者重写QDialog的键盘事件将回车键屏蔽掉。
总结:
害,你说下键不下键