因为cv代码的时候不小心把grabKeyboard()写了上去,测试弹出对话框的输入时,刚开始使用输入法输入中文词汇进去没有问题,当我打错了一个字准备删除时,发现删除键完全没有用,然后我又尝试输入英文单词也没有用,整个输入框对键盘的操作没有任何反应。
经过了一番搜索,发现代码里多出一行
this->grabKeyboard();
这个组件会接收所有的键盘事件,直到你把这个组件库释放。所以可能键盘事件都被这个组件拦截了。。。删除后就可以正常输入了。QT助手里给的描述如下:
Grabs the keyboard input.
This widget receives all keyboard events until releaseKeyboard() is called; other widgets get no keyboard events at all. Mouse events are not affected. Use grabMouse() if you want to grab that.
The focus widget is not affected, except that it doesn’t receive any keyboard events. setFocus() moves the focus as usual, but the new focus widget receives keyboard events only after releaseKeyboard() is called.
If a different widget is currently grabbing keyboard input, that widget’s grab is released first.
See also releaseKeyboard(), grabMouse(), releaseMouse(), and focusWidget().
某翻译版本:
这个小组件接收所有的键盘事件,直到调用releaseKeyboard();其他小组件完全没有得到键盘事件。鼠标事件不受影响。如果你想抓取,请使用 grabMouse() 。
setFocus()像往常一样移动焦点,但新的焦点部件只有在调用releaseKeyboard()后才能接收键盘事件。
如果一个不同的小组件目前正在抓取键盘输入,该小组件的抓取会首先被释放。
参见releaseKeyboard(), grabMouse(), releaseMouse(), and focusWidget()。