分页: 1 / 1
Qt编写的程序运行过程中界面突然不显示
发表于 : 2021-03-05 16:54
由 Fuxaio0510
如题,系统Ubuntu18.04 aarch64,程序使用Qt5.9.5编写,已经稳定运行比较长的时间了,前几天突然在运行过程中界面消失了,在启动栏上的图标也消失,但是进程还在,查看日志工作线程继续在工作。
调试发现调用主界面hide方法造成的现象和遇到的现象一样。
另外有没有可能ubuntu系统,或者系统中其他程序隐藏了我写的程序的界面?
我觉得基本可以排除内存、指针、数组非法访问,因为进程并未退出,且工作线程仍然在运行。
该问题属于偶发,目前无法复现。请教有什么定位思路,谢谢。
Re: Qt编写的程序运行过程中界面突然不显示
发表于 : 2021-03-06 9:57
由 flwwater
Qt + python ?
Qt + c++ ?
Re: Qt编写的程序运行过程中界面突然不显示
发表于 : 2021-03-06 15:07
由 Fuxaio0510
flwwater 写了: ↑2021-03-06 9:57
Qt + python ?
Qt + c++ ?
Qt,C++
Re: Qt编写的程序运行过程中界面突然不显示
发表于 : 2021-03-07 12:23
由 astolia
如果你图形环境是默认的X11,那确实可能是某些外部来源让你的窗口隐藏了。
你可以用
代码: 全选
xdotool search --pid 进程ID
或者
代码: 全选
xwininfo -tree -root
确认下窗口还在不在。如果窗口在,那可以再用
代码: 全选
xwininfo -stats -id 窗口ID
来进一步确认Map State是不是IsUnMapped
可以从外部观察到隐藏事件的发生,但没法知道是什么发起了隐藏命令。如果你不想你的程序窗口被其他程序隐藏,可以尝试在窗口中监视hideEvent(
https://doc.qt.io/qt-5/qwidget.html#hideEvent)或者更底层的 native event(
https://doc.qt.io/qt-5/qwidget.html#nativeEvent 或者
https://doc.qt.io/qt-5/qcoreapplication ... ventFilter),来阻止隐藏或在隐藏后立即恢复显示
你可以用如下python程序来模拟外部程序隐藏,需要安装python-xlib或python3-xlib,看你用python2还是python3
代码: 全选
import Xlib.display
d = Xlib.display.Display()
d.create_resource_object('window', 窗口ID).unmap()
d.sync()
Re: Qt编写的程序运行过程中界面突然不显示
发表于 : 2021-03-11 14:50
由 flwwater
你的d-bus有没有注册过这个东东,比如我的ktorrent这个程序,它有mainwindow对象(Qt程序都有吧...),通过d-bus,就能传输函数给它,我这里传输的是org.qtproject.Qt.QWidget.show这个函数,通过快捷键,本来隐藏的程序就能显示出来,你可以自己根据我的图片自己琢磨一下
我用的是KDE,在系统设置-》快捷键-》自定义里添加的。