簡體   English   中英

Qt:C ++:恢復彈出對話框的幾何圖形

[英]Qt: C++: Restoring geometry of a pop-up dialog-box

我試圖保存彈出對話框的幾何,然后每當我調用彈出對話框(當應用程序仍在運行時)恢復它。

但我無法理解。

代碼運行沒有錯誤。 但是彈出窗口每次打開時都會不斷地垂直改變它的位置。 除非我關閉整個應用程序然后再次重新打開它,否則彈出窗口永遠不會到達屏幕中心的原始位置。

我正在嘗試使用QcloseEventQSettingsrestoreGeometry 但有些事情是不對的,請幫忙。

這是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());
}

請比較以下兩行使用的密鑰:

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

這會阻止您在一個地方輸入錯誤的密鑰......

暫無
暫無

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

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