Qt:C++:恢复弹出对话框的几何图形

Posted

技术标签:

【中文标题】Qt:C++:恢复弹出对话框的几何图形【英文标题】:Qt: C++: Restoring geometry of a pop-up dialog-box 【发布时间】:2016-04-26 09:15:25 【问题描述】:

我正在尝试保存弹出对话框的几何图形,然后在我调用弹出对话框时将其恢复(当应用程序仍在运行时)。

但我想不通。

代码运行没有错误。但是弹出窗口的窗口每次打开时都会垂直改变它的位置。除非我关闭整个应用程序然后重新打开它,否则弹出窗口永远不会回到屏幕中心的原始位置。

我正在尝试使用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());

【问题讨论】:

【参考方案1】:

请比较以下两行使用的密钥:

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

这将防止您在一个地方键入错误的密钥...

【讨论】:

以上是关于Qt:C++:恢复弹出对话框的几何图形的主要内容,如果未能解决你的问题,请参考以下文章

1 Qt框架初探

QT 弹出选择对话框,窗口置顶

Qt按钮点击弹出子对话框,然后父窗口不可点击怎么弄

Qt窗口关闭弹出确认对话框

Qt窗口关闭弹出确认对话框

QT软件弹出的对话框界面很大,超出电脑屏幕显示范围怎么办?