阅读:7743回复:29

yong关于QT的情况说明

楼主#
更多 发布于:2016-01-02 16:26
有人报告说深度桌面中没法使用,赶紧去查了一下,原来用了QT5开发的桌面(深度感觉比较奇葩,桌面环境是QT和GTK混着来的,不过以后看来会转向QT),再想想LXQT桌面也是用QT5开发的,一时间压力大增,赶紧去看文档,找例子。

花了一天时间,把QT5的输入法插件坐出来了,一半的时间在迁移GTK插件的代码到QT,这个过程比我想象中容易很多,因为QT程序竟然支持GLIB主循环,这样通讯事件处理直接用就行了,不用专门写个QT的版本了(当然我找了半天,也没发现怎么把文件事件处理加入到QT主循环中的方法)。还有一半时间花在怎么编译一个QT程序上了,因为QT程序都不是标准的C++,需要一些特殊处理,而网上找到的资料基本都用了CMake和qmake之类自动给处理好了,底层怎么工作的就不清楚了。

有一些特殊的情况需要说明,QT5和QT4对输入法的插件支持接口什么的是不一样的,所以小小输入法还是没有QT4的插件支持,而这两个公用了QT_IM_MODULE环境变量来指定使用的输入法插件,所以现在是个非此即彼的关系,总有一个不能用,要用QT4程序,还是得用xim模块。
在这点上GTK好多了,GTK3和GTK2在输入法插件的源码是一模一样的,重新编译一下即可。

由于做的这个插件使用了GLIB主循环,所以要用这个插件,QT库必须编译进GLIB支持,运行的时候也不能设置QT_NO_GLIB环境变量。

据说QT插件在新版本的QT库上编译的话,不能在老版本上用,而我这个是在5.5.1版本上编译的,那么之前的QT版本应该就用不了它了。QT的平台级插件据说是和版本绑定的,我不是很清楚,但看它的头文件确实放在版本对应的目录下面,那么很可能确实是这样,所以这个插件很可能在之后的版本中也不能用,真是个悲剧的故事。因为这个问题,所以我输入法的安装脚本中,是不能集成QT5模块的支持,只能是用户需要的时候自己添加进去。还有更悲剧的,如果每个版本都得编译一个插件,那么,这就绝对不是我能发布得过来的,搞不好逼得我只好开源QT插件,然后让用户自己去编译了。
沙发#
发布于:2017-02-15 19:50
dgod:输入法请用最新测试版安装,并先用自带的更新功能更新一下回到原帖
小白问一句怎么安装qt5模块,我用的是manjaro基于arch
haulm
新手上路
新手上路
  • 社区居民
板凳#
发布于:2016-06-28 11:17
使用  dmesg 指令来定位段错误的位置还是很准的。

也只正常了一会儿,kde 下没办法调试下去了。
haulm
新手上路
新手上路
  • 社区居民
地板#
发布于:2016-06-28 11:00
降级 glib2 可以解决崩溃的问题,是否考虑一下升级编译环境 glib2-2.48。
root 账号系统托盘图标经常丢失,普通用户正常,这个何解?
4楼#
发布于:2016-06-28 09:31
haulm:你能否重编译 qt5 的支持模块,因为系统环境和 qt5 版本不同,debuginfo 我一直都没有保留,
但即使安装了也不一定能找对位置。因为 fcitx 没问题,所以又不能说一定是系统问题。
KDE 出错崩溃比如 konsole5 ...
回到原帖
和qt5模块没关系,现在的问题是yong主程序崩溃了,崩溃的栈我在上面贴出了了,问题应该是在xcb或者gtk。fcitx用的不是gtk。
也有可能是我的代码破坏了进程中gtk或xcb的内存,所以我想用valgrind检查一下。

如果不止我的程序有莫名其妙崩溃问题的话,建议升级或降级一下X相关的包试试。
haulm
新手上路
新手上路
  • 社区居民
5楼#
发布于:2016-06-28 09:18
你能否重编译 qt5 的支持模块,因为系统环境和 qt5 版本不同,debuginfo 我一直都没有保留,
但即使安装了也不一定能找对位置。因为 fcitx 没问题,所以又不能说一定是系统问题。
KDE 出错崩溃比如 konsole5 关闭崩溃经常直接指向 glibc,于是没有结果,konsole4 又没问题。
我也认为应该系统环境可能有问题,但找不到位置。
6楼#
发布于:2016-06-27 20:29
haulm:描述一下:打开 dolphin 输入不出中文,关闭 dolphin,yong 输入法跟随一起退出了。回到原帖
(gdb) backtrace
#0  0x00007ffff4b7caed in  () at /lib64/libc.so.6
#1  0x00007ffff4b7e200 in malloc () at /lib64/libc.so.6
#2  0x00007ffff48e79cb in _xcb_in_read () at /lib64/libxcb.so.1
#3  0x00007ffff48e55f1 in _xcb_conn_wait () at /lib64/libxcb.so.1
#4  0x00007ffff48e6d37 in wait_for_reply () at /lib64/libxcb.so.1
#5  0x00007ffff48e6e41 in xcb_wait_for_reply () at /lib64/libxcb.so.1
#6  0x00007ffff73aa197 in _XReply () at /lib64/libX11.so.6
#7  0x00007ffff738ec4e in XGetGeometry () at /lib64/libX11.so.6
#8  0x00007ffff681aabf in gdk_window_x11_get_geometry () at /lib64/libgdk-3.so.0
#9  0x00007ffff67ee694 in gdk_window_get_geometry () at /lib64/libgdk-3.so.0
#10 0x00007ffff67e83ff in gdk_screen_get_monitor_at_window () at /lib64/libgdk-3.so.0
#11 0x00007ffff6dfe769 in gtk_window_guess_default_size () at /lib64/libgtk-3.so.0
#12 0x00007ffff6e02dca in gtk_window_compute_configure_request () at /lib64/libgtk-3.so.0
#13 0x00007ffff6e03734 in gtk_window_check_resize () at /lib64/libgtk-3.so.0
#14 0x00007ffff53fbbd4 in _g_closure_invoke_va () at /lib64/libgobject-2.0.so.0
#15 0x00007ffff541725d in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
#16 0x00007ffff541789f in g_signal_emit () at /lib64/libgobject-2.0.so.0
#17 0x00007ffff6be49c8 in gtk_container_idle_sizer () at /lib64/libgtk-3.so.0
#18 0x00007ffff53fbbd4 in _g_closure_invoke_va () at /lib64/libgobject-2.0.so.0
#19 0x00007ffff541725d in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
#20 0x00007ffff5417d65 in g_signal_emit_by_name () at /lib64/libgobject-2.0.so.0
#21 0x00007ffff67e5618 in gdk_frame_clock_paint_idle () at /lib64/libgdk-3.so.0
#22 0x00007ffff67d3a58 in gdk_threads_dispatch () at /lib64/libgdk-3.so.0
#23 0x00007ffff5125ad3 in g_timeout_dispatch () at /lib64/libglib-2.0.so.0
#24 0x00007ffff512507a in g_main_context_dispatch () at /lib64/libglib-2.0.so.0
#25 0x00007ffff5125410 in g_main_context_iterate.isra () at /lib64/libglib-2.0.so.0
#26 0x00007ffff5125732 in g_main_loop_run () at /lib64/libglib-2.0.so.0
#27 0x00007ffff6ca4b25 in gtk_main () at /lib64/libgtk-3.so.0
#28 0x000000000041b389 in  ()
#29 0x0000000000409123 in  ()
#30 0x00007ffff4b1d6c0 in __libc_start_main () at /lib64/libc.so.6
#31 0x00000000004091aa in  ()


输入法崩溃的情况,看着没有我写的代码,应该是系统的问题。

我这测试是能输出中文的,但偶然关闭dophin导致输入法崩溃。

本想用valgrind看一下,但自带的valgrind看起来竟然依赖于glibc-debuginfo,但我不知道在你的系统中怎么安装这个包。
haulm
新手上路
新手上路
  • 社区居民
7楼#
发布于:2016-06-27 19:34
描述一下:打开 dolphin 输入不出中文,关闭 dolphin,yong 输入法跟随一起退出了。
haulm
新手上路
新手上路
  • 社区居民
8楼#
发布于:2016-06-27 19:07
一切设置后可以工作了,但是不稳定,yong 总是突然闪退,然后又得运行 yong -d 。
需要解决的问题:
1. 在 dolphin 和 xterm 来回焦点切换打字后闪退,或者是 dolphin 关闭时闪退,似乎是 qt5 支持模块崩溃,因为 dolphin 先会打不出字来,qt5 支持不稳定;
2. root 运行的话自定义的托盘图标会不显示,fcitx 也是这样的,kde5 下特别情况。
3. yong-wayland 有可能会导致 kwin 崩溃。
haulm
新手上路
新手上路
  • 社区居民
9楼#
发布于:2016-06-27 18:36
sudo 有些人是用不习惯的,一般来说我是直接 su 后再进行操作,然后 exit 退出操作,sudo 可以在线上安装,这个是题外话了。
另外的一个问题:kde5 并不能通过  /etc/X11/xinit/xinitrc.d/90-yong.sh 里面直接写入 yong -d 运行,否则功能上也没差别,但
系统托盘上图标不会显示。在 ~/.config/autostart/yong.desktop 里调用图标显示是正常的,我用 fcitx 也在这里,也许你觉得不
规范的。在以前输入法的确没有什么好选择的,不过 yong 和 fcitx 可供选择,打包方法就会有所变化。
wayland 在设置正常后删不删也都没什么问题。
我改变原有写死 /etc/profile 的方法,现在由这个文件来控制,并且在 rpm 打包将 yong 和 fcitx 设置为互相冲突:
/etc/X11/xinit/xinitrc.d/90-fcitx.sh
/etc/X11/xinit/xinitrc.d/90-yong.sh

上一页
游客

返回顶部