通过Xinit 启动的Qt程序,鼠标有时候变为“X”

软件和网站开发以及相关技术探讨
回复
药师9528
帖子: 9
注册时间: 2017-07-10 11:00
系统: Ubuntu 14.04

通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#1

帖子 药师9528 » 2017-07-10 11:13

如题,题主在开发一款运行在Ubuntu上面的软件,使用Qt5开发,开机启动终端后使用xinit 启动我自己的qt程序,现在的问题是,我程序用着用着,有时候鼠标就变成了一个“X”(原始X Window的那个样式),请教一下前辈们有没有遇到过类似的情况,如果有的话,还请不吝赐教。
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#2

帖子 vickycq » 2017-07-10 12:58

药师9528 写了:有时候鼠标就变成了一个“X”
是在 Qt 程序里面变成 “X”, 还是在外面,即 X 根窗口上变成 “X”?
有没有使用窗口管理器?
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
药师9528
帖子: 9
注册时间: 2017-07-10 11:00
系统: Ubuntu 14.04

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#3

帖子 药师9528 » 2017-07-10 13:49

vickycq 写了:
药师9528 写了:有时候鼠标就变成了一个“X”
是在 Qt 程序里面变成 “X”, 还是在外面,即 X 根窗口上变成 “X”?
就在我自己的那个 Qt 程序里,鼠标由正常的样子,变成了 X window 默认的那个 “X”,没有开其他的程序。
上次由 药师9528 在 2017-07-10 15:31,总共编辑 1 次。
药师9528
帖子: 9
注册时间: 2017-07-10 11:00
系统: Ubuntu 14.04

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#4

帖子 药师9528 » 2017-07-10 15:20

vickycq 写了:
药师9528 写了:有时候鼠标就变成了一个“X”
是在 Qt 程序里面变成 “X”, 还是在外面,即 X 根窗口上变成 “X”?
有没有使用窗口管理器?
在我自己写的 Qt 程序里变粗 “X”, 没有使用窗口管理器吧,我没有启动桌面,直接用xinit 启动了我的qt程序。
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#5

帖子 astolia » 2017-07-13 11:23

没遇到过这种用着用着自己变的,有可能是运行环境没弄好?或者是你代码无意中改动了系统的设置尤其是环境变量?
光标一般都不是由窗口管理器设置的,而是显示管理器/登录管理器。ubuntu的话,现在是lightdm,从你的描述看,应该没有用它?
直接用xinit启动,最好自己设置一下相关的东西。影响到光标主题的有XCURSOR_THEME环境变量,Xresources文件里设置的Xcursor.theme参数,你都注意一下呗。也可在xinitrc文件里用xsetroot -cursor_name 设置
上次由 astolia 在 2017-07-13 11:29,总共编辑 1 次。
药师9528
帖子: 9
注册时间: 2017-07-10 11:00
系统: Ubuntu 14.04

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#6

帖子 药师9528 » 2017-07-13 11:27

astolia 写了:没遇到过这种用着用着自己变的,有可能是运行环境没弄好?
影响到光标主题的有XCURSOR_THEME环境变量,Xresources文件里设置的Xcursor.theme参数,你都设置一下呗
或者在xinitrc文件里用xsetroot -cursor_name 设置
这两天跟了一下,发现光标变样的情况如下:

我打开了一个弹窗,弹窗上有一个按钮,我点了按钮之后,这个弹窗关闭,并且返回到另一个页面,这时候鼠标就会变成“X”,然后我再点击触摸屏,鼠标又会变回来。
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#7

帖子 astolia » 2017-07-13 11:38

从你的描述来看像是因为Qt程序和X用了不同的光标主题。你在xinitrc里给X设置一下主题应该就行了
药师9528
帖子: 9
注册时间: 2017-07-10 11:00
系统: Ubuntu 14.04

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#8

帖子 药师9528 » 2017-07-13 13:35

astolia 写了:从你的描述来看像是因为Qt程序和X用了不同的光标主题。你在xinitrc里给X设置一下主题应该就行了
找了一下您说的相关设置,网上说的都比较含糊,请问可以详细一点怎样设置吗?
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#9

帖子 astolia » 2017-07-13 15:17

就是在.xinitrc里面加一行

代码: 全选

xsetroot -cursor_name left_ptr
将X默认的光标设置为普通箭头,如果你程序默认是其他光标,根据下面的列表选
xsetroot -cursor_name draped_box
xsetroot -cursor_name hand1
xsetroot -cursor_name hand2
xsetroot -cursor_name iron_cross
xsetroot -cursor_name plus
xsetroot -cursor_name top_left_arrow
xsetroot -cursor_name watch
药师9528
帖子: 9
注册时间: 2017-07-10 11:00
系统: Ubuntu 14.04

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#10

帖子 药师9528 » 2017-07-13 15:21

astolia 写了:就是在.xinitrc里面加一行

代码: 全选

xsetroot -cursor_name left_ptr
将X默认的光标设置为普通箭头,如果你程序默认是其他光标,根据下面的列表选
xsetroot -cursor_name draped_box
xsetroot -cursor_name hand1
xsetroot -cursor_name hand2
xsetroot -cursor_name iron_cross
xsetroot -cursor_name plus
xsetroot -cursor_name top_left_arrow
xsetroot -cursor_name watch
好的,非常感谢,在网上找了好多 xsetroot 的内容,都比较含糊,多谢您的指教,我现在就设置一下看,如果没有 .xinitrc 的话,是不是自己建立一个 ~/.xinitrc 也可以?
药师9528
帖子: 9
注册时间: 2017-07-10 11:00
系统: Ubuntu 14.04

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#11

帖子 药师9528 » 2017-07-13 15:22

astolia 写了:就是在.xinitrc里面加一行

代码: 全选

xsetroot -cursor_name left_ptr
将X默认的光标设置为普通箭头,如果你程序默认是其他光标,根据下面的列表选
xsetroot -cursor_name draped_box
xsetroot -cursor_name hand1
xsetroot -cursor_name hand2
xsetroot -cursor_name iron_cross
xsetroot -cursor_name plus
xsetroot -cursor_name top_left_arrow
xsetroot -cursor_name watch
好的,非常感谢,在网上找了好多 xsetroot 的内容,都比较含糊,多谢您的指教,我现在就设置一下看,如果没有 .xinitrc 的话,是不是自己建立一个 ~/.xinitrc 也可以?
药师9528
帖子: 9
注册时间: 2017-07-10 11:00
系统: Ubuntu 14.04

Re: 通过Xinit 启动的Qt程序,鼠标有时候变为“X”

#12

帖子 药师9528 » 2017-07-13 15:56

astolia 写了:就是在.xinitrc里面加一行

代码: 全选

xsetroot -cursor_name left_ptr
将X默认的光标设置为普通箭头,如果你程序默认是其他光标,根据下面的列表选
xsetroot -cursor_name draped_box
xsetroot -cursor_name hand1
xsetroot -cursor_name hand2
xsetroot -cursor_name iron_cross
xsetroot -cursor_name plus
xsetroot -cursor_name top_left_arrow
xsetroot -cursor_name watch
搞定了,我在自己程序里用加了句
system("xsetroot -cursor left_ptr");
非常感谢
回复