0

Qt アプリに問題があります。アプリの qeometry を問題なく保存および復元できます。問題は、close イベントで最大化されたアプリの saveGeometry を試みた後、最小化されたアプリ (「起動時に最小化して実行」など) を起動しようとしたときです。それを行ってタスクバーのアイコンをクリックすると、ウィンドウは通常のウィンドウとして開きます(最大化されていません)。

いくつかの回避策をイメージ (および記述) することはできますが、すべての Gui ロジックを使用すると、ネイティブな方法を好むという間違いを犯しやすくなります。最小化後にウィンドウを最大化または通常に設定できる場合、パラメータのようなものを探しています。

アプリを最大化して起動すると、この問題は発生しません。次にウィンドウを最小化し、再度最大化します。この場合、すべて問題ありません。問題は起動時のみです。

些細なことのように見えますが、日常的に使うアプリや、日常的にウィンドウを持つことができないアプリを考えると、これは大きなことだと思います。


編集:

数時間後、私はあきらめます。これが私の回避策です。まだ十分にテストされていませんが、将来誰かがそれを必要とするかもしれません. エラーまたはより良い解決策が見つかった場合は編集します。

#include "mainwindow.h"
#include <QSettings>
#include <QCloseEvent>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), settings("MyCompany",     "MyApp") {
    settingsReaded = false;
    startMinimized = true;

    if(startMinimized) showMinimized();
    else show();
}

void MainWindow::closeEvent(QCloseEvent *event) {
    settings.setValue("geometry", saveGeometry());
    showMinimized();
    event->ignore();
}

void MainWindow::readSettings() {
    restoreGeometry(settings.value("geometry").toByteArray());
    settingsReaded = true;
}

void MainWindow::changeEvent(QEvent * event) {
    bool isActive = (event->type() == QEvent::ActivationChange && isActiveWindow());

    //load settings on first window activation (click on icon of minimized window or
    //open window if we have startMinimized = false
    //settingsReaded - determine that the settings was loaded only once.
    if(isActive && !settingsReaded) {
        readSettings();
    }
}    
4

0 に答える 0