遇到的难题:
在Linux的系统中,本来在有桌面的系统下使用qt开发了一个桌面的程序,然后去掉桌面就发现很多的问题。系统启动的时候,不启动桌面,所以程序是自己独立运行的了。
- 输入的控件获取不到焦点,输入时候虽然能输入,但是控件没有了输入的闪动,应该是焦点问题。
- 弹窗的位置的变化,弹窗的位置不再是最中间的位置,变成了左上角的位置了。
- 窗口背景透明失效
- 还有其他的问题,后面就没有继续去测了。
分析问题和解决问题:
根据这个可以判断到,自己使用的桌面系统有关,既是桌面系统帮我管理的窗口,现在没有了桌面,就会发生这个问题。
目前想到的方法就只有两个:
- 第一种
是针对的性的去解决这个问题:
比如,没有焦点,就在qt中,强制给设置焦点:
bool TestPanel::eventFilter(QObject *w, QEvent *e)
{
if(e->type() == QEvent::MouseButtonPress){
if(w->isWidgetType()) {
qApp->setActiveWindow(reinterpret_cast<QWidget*>(w)->window());
}
}
return QWidget::eventFilter(w, e);
}
但是有些问题还是不能用第一种方法去解决。背景透明问题,还没有找到方法。
- 第二种
给增加一个窗口管理器,让窗口管理器跟桌面系统一样帮我管理窗口问题。
我这里使用的mutter窗口管理器。
当然还有其他的,不同的窗口管理器还不一样,这个需要自己去试一下。
Linux中 Mutter 的安装
Mutter 是 GNOME 桌面环境的默认窗口管理器,负责管理窗口的显示、布局和交互。
sudo apt update
sudo apt install mutter
启用 Mutter:
mutter
有许多其他的窗口管理器(Window Manager)可供选择,以下是一些常见的窗口管理器:
- Openbox: Openbox 是一个轻量级、灵活的窗口管理器,支持大量的配置和自定义选项。
- Fluxbox: Fluxbox 是另一个轻量级的窗口管理器,具有简洁的界面和高度的可配置性。
- i3: i3 是一个基于 tiled 窗口管理器,使用键盘快捷键来管理窗口-layout。
- awesome: awesome 是一个高度可配置的窗口管理器,使用 Lua 语言来编写配置脚本。
- KWin: KWin 是 KDE 桌面环境中的窗口管理器,支持大量的特效和可配置选项。
- Xfwm: Xfwm 是 Xfce 桌面环境中的窗口管理器,轻量级、灵活和高度可配置。
- Compiz: Compiz 是一个基于 OpenGL 的窗口管理器,支持大量的视觉效果和插件。
- LightDM: LightDM 是一个轻量级的显示管理器,可以作为窗口管理器使用。
- Sawfish: Sawfish 是一个基于 Lisp 语言的窗口管理器,高度可配置和灵活。
- Enlightenment: Enlightenment 是一个功能强大、可高度配置的窗口管理器,支持大量的视觉效果和插件。
这些窗口管理器都有其特点和优缺点,选择哪一个取决于您的个人喜好和需求。
以下是一些窗口管理器的特点:
- 轻量级:Openbox、Fluxbox、i3
- 高度可配置:awesome、Sawfish、Enlightenment
- 视觉效果:Compiz、KWin
- 简洁易用:LightDM、Xfwm
注意:有些窗口管理器可能需要额外的 dependencies 或配置来工作正确。