В 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 () окна имеют смещение с положениемдо закрытия мероприятия.Изображение более четкое, чем текст:
Красная линия - это позиция перед событием закрытия.
Похоже,новая позиция задается в верхней левой точке виджета, исключая фрейм окна перед тем, как в верхней левой точке виджета устанавливается событие закрытия, включая фрейм окна после вызова метода show ().
Есть идеи?
Редактировать 1
Это смещение выше для Windows.Когда я работаю в Linux KDE, кажется, что смещение в другом направлении ....
Редактировать 2:
Это смещение появляется только когда QDialogзакройте крест сверху справа.Когда QDialog закрывается с помощью кнопки закрытия (подключается к слоту close ()), смещение здесь отсутствует ...