Qt: C++: 恢复弹出对话框的几何形状
Qt: C++: Restoring geometry of a pop-up dialog-box
我正在尝试保存弹出对话框的几何形状,然后在我调用弹出对话框时将其恢复(当应用程序仍为 运行 时)。
但我想不通。
代码运行没有错误。但是弹出窗口的 window 每次打开时都会垂直改变它的位置。除非我关闭整个应用程序然后再次打开它,否则弹出窗口永远不会回到屏幕中央的原始位置。
我正在尝试使用 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());
}
请比较以下两行使用的密钥:
settings.setValue("geometery", saveGeometry());
和
restoreGeometry(settings.value("QDialog/geometry").toByteArray());
"geometry"
对比 "QDialog/geometry"
。应该是一样的!
另外,我会在 cpp 文件中预先定义您的 keys/organization/application 名称,例如:
...
static const char * ksOrganization{"DevSuda"};
static const char * ksApp {"Muwassa"};
static const char * ksKey {"geometery"};
...
QSettings settings(ksOrganization, ksApp);
settings.setValue(ksKey, saveGeometry());
这将防止您在一个地方输入错误的密钥...
我正在尝试保存弹出对话框的几何形状,然后在我调用弹出对话框时将其恢复(当应用程序仍为 运行 时)。
但我想不通。
代码运行没有错误。但是弹出窗口的 window 每次打开时都会垂直改变它的位置。除非我关闭整个应用程序然后再次打开它,否则弹出窗口永远不会回到屏幕中央的原始位置。
我正在尝试使用 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());
}
请比较以下两行使用的密钥:
settings.setValue("geometery", saveGeometry());
和
restoreGeometry(settings.value("QDialog/geometry").toByteArray());
"geometry"
对比 "QDialog/geometry"
。应该是一样的!
另外,我会在 cpp 文件中预先定义您的 keys/organization/application 名称,例如:
...
static const char * ksOrganization{"DevSuda"};
static const char * ksApp {"Muwassa"};
static const char * ksKey {"geometery"};
...
QSettings settings(ksOrganization, ksApp);
settings.setValue(ksKey, saveGeometry());
这将防止您在一个地方输入错误的密钥...