2016-04-26 3 views
1

Я пытаюсь сохранить геометрию всплывающего диалогового окна, а затем восстановить его, когда я вызываю всплывающее диалоговое окно (в то время как приложение все еще работает).Qt: C++: восстановление геометрии всплывающего диалогового окна

Но я не мог понять это.

Код работает без ошибок. Но окно всплывающего окна постоянно меняет позицию вертикально каждый раз, когда оно открыто. Если я не закрываю все приложение, а затем снова открываю его, всплывающее окно никогда не переходит в исходное положение в центре экрана.

Я пытаюсь использовать QcloseEvent, QSettings и restoreGeometry. Но что-то не так, пожалуйста, помогите.

Вот mainwindow.cpp:

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include "ui_addmembersdialog.h" 
#include "addmembersdialog.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    mpAddMembersDialog = new AddMembersDialog; 
    connect(ui->testBtn,SIGNAL(clicked()),this,SLOT(openPopUpForm())); 
} 

void MainWindow::openPopUpForm(){ 
    mpAddMembersDialog->readSettings(); 
    mpAddMembersDialog->exec(); 
} 

Вот AddMembersDialog.cpp:

#include "addmembersdialog.h" 
#include "ui_addmembersdialog.h" 
#include <QMessageBox> 

AddMembersDialog::AddMembersDialog(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::AddMembersDialog) 
{ 
    ui->setupUi(this); 
    connect(ui->closeFormBtn,SIGNAL(clicked()),this,SLOT(Exit())); 
} 
void AddMembersDialog::Exit() 
{ 
    close(); 
} 

void AddMembersDialog::closeEvent(QCloseEvent *event){ 
    QSettings settings("DevSuda", "Muwassa"); 
    settings.setValue("geometery", saveGeometry()); 
    QDialog::closeEvent(event); 
} 

void AddMembersDialog::readSettings(){ 
    QSettings settings("DevSuda", "Muwassa"); 
    restoreGeometry(settings.value("QDialog/geometry").toByteArray()); 
} 

ответ

3

Пожалуйста, сравните ключ, используемый для следующих двух линий:

settings.setValue("geometery", saveGeometry()); 

и

restoreGeometry(settings.value("QDialog/geometry").toByteArray()); 

"geometry" против "QDialog/geometry". Должно быть одинаково!

также я бы предопределить ваши ключи/название организации/приложения в файле CPP, такие как:

... 
static const char * ksOrganization{"DevSuda"}; 
static const char * ksApp   {"Muwassa"}; 
static const char * ksKey   {"geometery"}; 
... 
QSettings settings(ksOrganization, ksApp); 
settings.setValue(ksKey, saveGeometry()); 

Это позволит вам вводить ключ неправильно в одном месте ...

Смежные вопросы