QWSInputMethod在线程中的问题?

帅得不敢出门
博客专家认证
2011-08-13 11:18:24
QWSInputMethod 是嵌入式linux下输入法接口类.
我实现了一个类假设为testInput,派生自QWSInputMethod, 我已经实现成单例模式.

QWSServer::setCurrentInputMethod ( QWSInputMethod * method ) 用来设置使用我的输入法.
但是 多个进程调用, 却是产生多个testInput实例, 问题1 有没有办法只产生一个?

进程A中调用线程启动程序B, 在B中一调用testInput 输入法就会 打印QWSLock::lock: Invalid argument 然后segment fault
问题二: 如何在线程中的qt应用程序也能使用这个输入法?

...全文
452 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkppostt 2011-08-15
  • 打赏
  • 举报
回复
鼠标跟踪的就没做过了,实在不好意思
帅得不敢出门 2011-08-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lkppostt 的回复:]

Qt::Tool
[/Quote]
这个我知道. 但是怎么判断焦点窗口的位置? 显示输入法时,显示在哪里比较合适.

就像平常输入法的光标跟随.

回复7楼 : 怎么调用这个由人指定, ctrl+space 这个是没有问题的.
念茜 2011-08-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lkppostt 的回复:]
ctrl+space来调出来就没用过,我用的是A中直接把输入法显示出来,B中就可以用,你不妨试下直接显示出来看能不能
[/Quote]

ctrl+space是和别的冲突了么
lkppostt 2011-08-13
  • 打赏
  • 举报
回复
Qt::Tool
帅得不敢出门 2011-08-13
  • 打赏
  • 举报
回复
因为要在输入法中判断焦点窗口位置 ,防止位置重叠.
不知道 lkppostt 兄是如何做的?
帅得不敢出门 2011-08-13
  • 打赏
  • 举报
回复
找到问题所在了, 我在输入法中调用了QApplication::focusWidget() , 而在线程中的程B中,调它时会得不到.
我直接操作这个指针就over了.

不过多个进程只产生一个实例 这个如何实现 还没想到.
lkppostt 2011-08-13
  • 打赏
  • 举报
回复
ctrl+space来调出来就没用过,我用的是A中直接把输入法显示出来,B中就可以用,你不妨试下直接显示出来看能不能
帅得不敢出门 2011-08-13
  • 打赏
  • 举报
回复
主程序A(加-qws)中setCurrentInputMethod
然后 线程中调用程序B, B的确是不用-qws,而且也没有在b中setCurrentInputMethod,
但是在b中ctrl+space 调出输入法时出错了.QWSLock::lock: Invalid argument

lkppostt 2011-08-13
  • 打赏
  • 举报
回复
嘿嘿,刚解决了这个问题,很简单的原理,QWSInputMethod 只能在QSWServer中使用,你的多个进程肯定是用QProcess来调用的,而调用产生子界面的时候并没有传递QWS参数,即不是服务器,所以子界面中不能用。
解决方法:主程序中来产生输入法的界面,子程序只使用而不单独产生输入法。

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧