1

ポップアップ ダイアログ ボックスのジオメトリを保存し、ポップアップ ダイアログ ボックスを呼び出すたびに復元しようとしています (アプリケーションがまだ実行されている間)。

しかし、私はそれを理解できませんでした。

コードはエラーなしで実行されます。ただし、ポップアップのウィンドウは、開くたびに垂直方向に位置を変更し続けます。アプリケーション全体を閉じてから再度開かない限り、ポップアップが画面中央の元の位置に移動することはありません。

QcloseEventQSettingsおよびを使用しようとしています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());
}
4

1 に答える 1

3

次の 2 行に使用されているキーを比較してください。

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());

これにより、1 か所でキーを間違って入力するのを防ぐことができます...

于 2016-04-26T09:22:12.173 に答える