• 6975阅读
  • 3回复

[提问]串口操作后,子窗口中lineEdit具有焦点但收不到键盘输入 [复制链接]

上一主题 下一主题
离线rainmf
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-30
Qt4.7开发的程序,在fedora13上运行。
在父窗口中:
1,先以写文件方式向串口设备ttyS0写入一简短指令和数据,之后关闭了此串口,
2,然后exec一模态子窗体,焦点定位到子窗体中一lineEdit中,但是此lineEdit不能收到键盘输入。
3,当关闭子窗口,焦点定位到父窗口一lineEdit中并输入信息时,刚才在子窗口中的键盘输入都进入父窗口的lineEdit中了。

请高手帮忙分析解决。为什么键盘输入会阻塞了呢?是有什么中断导致的吗?
伽利略被投进监狱,地球还是绕着太阳转!
离线jdwx

只看该作者 1楼 发表于: 2011-05-30
2,然后exec一模态子窗体,焦点定位到子窗体中一lineEdit中,但是此lineEdit不能收到键盘输入
你在UI编辑器里调整一下控件的tab顺序,让lineedit是第一。显示窗口时lineedit自动获得焦点。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线rainmf
只看该作者 2楼 发表于: 2011-05-30
回 1楼(jdwx) 的帖子
将lineedit设置tab=1了,问题依旧。光标在lineedit中闪动,可就是收不到键盘输入。

问题补充:
1,子窗口中的另一lineedit,只是由于设置了echoModel=password,就能正常接收键盘输入。
2,如果把第一步进行的串口操作代码屏蔽,非password那个lineedit也能正常接收键盘输入了。
3,同样的程序在windows上运行完全正常。
伽利略被投进监狱,地球还是绕着太阳转!
离线rainmf
只看该作者 3楼 发表于: 2011-06-30
这个问题解决了,但是没明白造成问题的根本原因和原理,以及linux和win32的哪些不同机制造成了在2个系统下相同程序的不同表现。
解决办法:由于父窗体的输入框启用了事件过滤器,好像是因为这个吧,因此父窗体的输入框始终占据着键盘焦点,那么在进入子窗体之前,将父窗体输入框的焦点清除(clearFocus()或把焦点放到其它无事件过滤器的控件上)就没问题了。
伽利略被投进监狱,地球还是绕着太阳转!
快速回复
限100 字节
 
上一个 下一个