2

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 では、おそらくウィンドウの境界を補うために、ウィンドウは両方の軸で 1 ピクセルずれています。

  • Unityでは(つぶやき?)、ウィンドウをどこに置いても、復元するたびに10ピクセルを超えて微調整されます。また、y 制限があるように見えますが、一貫性があるため、それを受け入れることができます。

  • Fluxbox では、ウィンドウは保存されたサイズと位置に復元されます。

設定ファイルに保存されているバイト配列を少し掘り下げて分解しました。restoreGeometry() を使用する代わりにウィンドウの位置を手動で調整しようとしましたが、アプリケーションが対処している WM の矛盾の種類を知る方法は実際にはありません。一部の WM では、通常のジオメトリの代わりにフレーム ジオメトリを使用して位置を設定すると機能しますが、他のものは台無しになります。Qt ジオメトリのドキュメントから、X11 ウィンドウ マネージャーの一貫性はまったく期待できないと読んだので、アイデアがありません。賢い人がこれを解決してくれることを願っています!

4

0 に答える 0