簡體   English   中英

Qt,還原幾何體時的偏移

[英]Qt, offset when restore geometry

使用Qt 5.11,我有以下代碼可以保存QDialog子類的最終還原幾何:

    class HlgRunoffEditorDialog:public QDialog
    {
        some code
    }
    void HlgRunoffEditorDialog::show()
    {
        if (isVisible())
            return;

        ReosSettings settings;
        restoreGeometry(settings.value(QStringLiteral("RunoffEditorDialog/geometry")).toByteArray());
        ui->splitter->restoreState(settings.value(QStringLiteral("RunoffEditorDialog/splitter/geometry")).toByteArray());

        QDialog::show();

    }


void HlgRunoffEditorDialog::closeEvent(QCloseEvent *event)
{
    updateSettings();
    QDialog::closeEvent(event);
}

void HlgRunoffEditorDialog::updateSettings()
{
    ReosSettings settings;
    settings.setValue(QStringLiteral("RunoffEditorDialog/geometry"),saveGeometry());
    settings.setValue(QStringLiteral("RunoffEditorDialog/splitter/geometry"),ui->splitter->saveState());
}

問題是當調用show()方法時,窗口與close事件之前的位置有一個偏移量。 圖片比文字更明確:

在此處輸入圖片說明

紅線是關閉事件之前的位置。

似乎新位置是在窗口小部件的左上角(包括調用show()方法id之后的窗口框架)上設置關閉事件之前,已設置窗口小部件的左上角點(不包括窗口框架)。

任何想法 ?

編輯1

上面的偏移量是在Windows上。 當我在Linux KDE上運行時,偏移似乎在另一個方向上....

編輯2:

當QDialog關閉且十字在右上角時,此偏移量會出現。 當使用關閉按鈕(連接到close()插槽)關閉QDialog時,偏移不在此處...

為了正確地重置小部件(如Windows)的可見性狀態,您必須遵循以下調用順序:

// 1) show the widget
widget->show();

// 2) set status bar visibility (if exists)
//widget->statusBar->setVisible(booleanValueFromSettings);

// 3) set margins (if use it)
//widget->setContentsMargins(a, b, c, d);

// 4) geometry
widget->restoreGeometry(byteArrayFromSettings);

// 5) state (can be use it and for you splitter)
widget->restoreState(byteArrayFromSettings);

我記得一個項目,我必須計算一下,像這樣:

QRect ng = w->normalGeometry();
QRect frame = w->frameGeometry();
ng.adjust(-frame.x(), -frame.y(), -frame.x(), -frame.y());

並保存后面的值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM