请教下QT和Swing交互问题

昵称很不好取 2013-11-05 08:34:37
加精
项目在Linux平台,使用QT做界面,包含了几个widget,其中一个widget用QT的QX11EmbededContainer嵌入了一个用Java Swing写的应用程序窗体。但不幸的是只要操作过Swing窗口(即使是点一下鼠标),别的widget就无法接收键盘事件,例如在别的widget点击ListViewItem的Rename,就一直处于等待输入状态,键盘输入无法显示,后来发现所有键盘事件都被Swing抢走。如果测试比较多,偶尔会受到Xlib: unexpected async reply出错信息,进而进程hang死。以上问题只限于键盘,而鼠标操作没有问题,如果在其他widget上点击下鼠标的右键,弹出右键菜单,然后进行重命名之类的操作倒是可以把键盘事件抢过来。

请教下各位在改进设计方面有什么建议?
...全文
2085 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiangpingping111 2014-07-29
  • 打赏
  • 举报
回复
请问楼上怎么解决的这个问题,遇到同样的问题了
昵称很不好取 2013-11-20
  • 打赏
  • 举报
回复
搞掂了,自己控制程序的inputFocus,结贴~~
lopl 2013-11-11
  • 打赏
  • 举报
回复
怎么让非模态成为Swing程序?
swlilike 2013-11-11
  • 打赏
  • 举报
回复
不是不让在项目中挑战不确定性因素么。。
昵称很不好取 2013-11-09
  • 打赏
  • 举报
回复
引用 12 楼 raistlic 的回复:
能问一下为什么非要嵌入一个用Swing写的窗体吗?
用了一个开源的有Gui的库,只有Swing版的开源协议适合我们用。
raistlic 2013-11-09
  • 打赏
  • 举报
回复
能问一下为什么非要嵌入一个用Swing写的窗体吗?
luo496724812 2013-11-09
  • 打赏
  • 举报
回复
如果能拦截java的绘图事件的话,我建议直接把java生成的图像绘制到Qt的控件上,由这个Qt的空间将java widget的时间传递给java
zhangnimaq 2013-11-06
  • 打赏
  • 举报
回复
怎么让Swing程序成为非模态?
昵称很不好取 2013-11-05
  • 打赏
  • 举报
回复
引用 7 楼 LazyDreamHunter 的回复:
这说明焦点进入了就被你那个java程序接管了啊,你应该更改你的java程序,让它变成“非模态对话框”,要不就的通过进程间通信来解决了。
怎么让Swing程序成为非模态?
RabinSong 2013-11-05
  • 打赏
  • 举报
回复
这说明焦点进入了就被你那个java程序接管了啊,你应该更改你的java程序,让它变成“非模态对话框”,要不就的通过进程间通信来解决了。
昵称很不好取 2013-11-05
  • 打赏
  • 举报
回复
引用 5 楼 LazyDreamHunter 的回复:
我估计你一打开java程序,你所在的程序系统的输入输出就被java虚拟机接管了,就像你打开一个模态对话框一样,模态对话框消息循环,接管了所有事件,其他窗体不能获得控制权,只有等模态对话框退出了,其他窗体才能执行。 根据这个思路,当你弹出java程序时,你让其他窗体不使能,当java程序退出时,再使能。这样就不会出现冲突了
呵,两边需要交互的,要不也不需要嵌入窗体。 刚打开的如果鼠标没有点击不会抢,后来就被抢了。 现在方案基础上没得救了?
RabinSong 2013-11-05
  • 打赏
  • 举报
回复
我估计你一打开java程序,你所在的程序系统的输入输出就被java虚拟机接管了,就像你打开一个模态对话框一样,模态对话框消息循环,接管了所有事件,其他窗体不能获得控制权,只有等模态对话框退出了,其他窗体才能执行。 根据这个思路,当你弹出java程序时,你让其他窗体不使能,当java程序退出时,再使能。这样就不会出现冲突了
昵称很不好取 2013-11-05
  • 打赏
  • 举报
回复
引用 1 楼 LazyDreamHunter 的回复:
建议用QProcess打开java Swing做的程序,这样就不会挂掉。
如果在现有的基础上改,还有戏吗? 对Gui编程不熟悉,各种折腾
昵称很不好取 2013-11-05
  • 打赏
  • 举报
回复
引用 2 楼 LazyDreamHunter 的回复:
你这个怎么运行的,不需要jvm吗
有的,通过jni实现了 新的process是另一个方案了,需要process之间的通信。
RabinSong 2013-11-05
  • 打赏
  • 举报
回复
你这个怎么运行的,不需要jvm吗
RabinSong 2013-11-05
  • 打赏
  • 举报
回复
建议用QProcess打开java Swing做的程序,这样就不会挂掉。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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