我在 Xorg 1.13.1 上使用 Qt 4.8.4。我以文档中建议的相同方式保存窗口几何图形:
QSettings settings;
QByteArray geom = widget->saveGeometry();
settings.setValue("widget_geometry", geom);
同样在启动时恢复:
QSettings settings;
QByteArray geom = settings.value(buf).toByteArray();
widget->restoreGeometry(geom);
我面临的问题是窗口未放置在与保存相同的位置。尺寸很好。根据我使用的窗口管理器,结果会有所不同。
在 i3 中,窗口在两个轴上都相差一个像素,大概是为了弥补窗口边框。
在 Unity 中(mutter?),无论我将窗口放在哪里,每次恢复时它都会被轻推超过 10 个像素。它似乎也有一个 y 限制,但我可以忍受它,因为它是一致的。
在fluxbox中,窗口恢复到它保存的大小和位置。
我做了一些挖掘并解构了保存到设置文件中的字节数组。我尝试手动调整窗口的位置,而不是使用 restoreGeometry(),但应用程序确实无法知道它正在处理哪种 WM 不一致。在某些 WM 中,使用框架几何而不是普通几何来设置位置是可行的,但会搞砸其他的。我从 Qt 几何文档中读到,您不能真正指望 X11 窗口管理器的任何一致性,所以我没有想法。我只是希望那里的一些聪明人已经解决了这个问题!