4

セッション間でメインウィンドウのジオメトリを保存するQt(Ubuntu 12.04では4.8.1)アプリケーションを作成しています。ウィジェットが最大化されている場合、qtは最大化されていないジオメトリを保存していないことに気づきました。明らかに、最後の最大化以降に閉じられた/開始された場合と同じように、アプリケーションを最大化されていないサイズに戻したいと思います。の

  1. メインウィンドウは最大化されておらず、ジオメトリXがあります。
  2. メインウィンドウを最大化します。
  3. ウィンドウジオメトリを(QWidget :: saveGeometryを使用して)構成ファイルに保存します。
  4. アプリケーションを閉じます。
  5. もう一度やり直してください。
  6. 構成ファイルからジオメトリをロードします
  7. 復元(最大化解除?;)

ステップ6の後、ウィンドウは(予想どおりに)最大化されますが、ステップ7の後、最大化されていないジオメトリXが持続するのではなく、内部のデフォルトサイズ(つまり、QtCreatorでフォームを設計する際の1セット)に戻ります。

これは望ましい動作ですか?または、qt内に実装することは不可能/困難ですか?

最大化されたときに、最大化されていないサイズがウィンドウマネージャーによって記憶され、qtではなく(少なくともLinuxでは)記憶されるためですか?

4

3 に答える 3

4

そもそもウィンドウが最大化されている場合は、ジオメトリを保存する必要はありません。

必要な機能を取得するには、次のように手順を変更するだけです。

  1. メインウィンドウは最大化されておらず、ジオメトリXがあります。
  2. ジオメトリXもウィンドウの左上の位置をQPointYとして保存します
  3. メインウィンドウを最大化します。
  4. ジオメトリを保存しないでください(構成ファイルに保存する前に、を使用してウィンドウの状態が最大化されているかどうかを確認できQWidget::isMaximized()ます)。代わりに、新しいisMaximised状態値を構成ファイルに保存してください。
  5. アプリケーションを閉じます。
  6. もう一度やり直してください。
  7. window->show()電話をかける前にwindow->resize(lastQSizeSavedinSettingsofNonMaximisedState)window->move(lastQPointSavedinSettingsofNonMaximisedState)
  8. isMaximised次に、configから状態値を確認し、 trueの場合は、 QWidget :: showMaximized()を呼び出します。それ以外の場合は、QWidget::show()
  9. これで、ウィンドウサイズを復元すると、必要な機能が得られるはずです:)

ウィンドウのサイズ/状態を操作するときに留意すべき点。

アプリケーションの起動時に最後に保存された位置が範囲外であり、復元しようとしている値が画面の範囲内になくなった場合に備えて、常にフォールバックジオメトリと位置を指定してください。(これは、誰かが解像度/モニター数/モニター位置/仮想デスクトップを変更した場合のケータリングに役立ちます)

于 2013-02-27T12:39:05.180 に答える
1
4.ジオメトリを保存しないでください(構成ファイルに保存する前に、QWidget :: isMaximized()を使用してウィンドウの状態が最大化されているかどうかを確認できます)。代わりに、新しいisMaximised状態値を構成ファイルに保存します。

ここでのもう1つの問題は、ウィンドウが画面上の位置に基づいて最大化/最小化されるだけでなく、ウィンドウの大部分がどこにあるかに基づいて最大化/最小化されることです。ウィンドウの80%が画面1にあり、左上隅が画面2にある場合、最大化されたウィンドウは画面1に表示されます。

それでも、あなたのアイデアは最高のものです。(QT5を使用して)1時間以上のグーグルの後、私は今使用します:

writeSettings:

settings.setValue("pos", pos());
if(!isMaximized())
    settings.setValue("size", size());
settings.setValue("maximized", isMaximized());

readSettings:

if(settings.contains("pos"))
    move(settings.value("pos").toPoint());
if(settings.contains("size"))
    resize(settings.value("size").toSize());

if(settings.value("maximized").toBool())
    setWindowState(windowState() | Qt::WindowMaximized);
于 2013-11-15T09:05:46.247 に答える
0

あなたが抱えている問題は、QWidgetで読み取り可能で設定可能な多くのジオメトリとサイズに起因していると思います。具体的には、normalGeometry、height、width、maximumHeight、maximumWidth、minimumHeight、minimumWidthなどの違いを確認することをお勧めします。

于 2013-02-27T12:26:33.683 に答える