我刚刚解决了。使用 QDialog 而不是 QWidget 作为基类允许使用 QDialog::exec(); 调用窗口 并且父小部件将暂停,直到窗口再次关闭。
编辑:这是我刚刚从备份磁盘中挖掘出来的解决方案的来源。我不得不说,这是几年前我最后一次使用 Qt 和这段代码,所以它可能是不正确的。我希望它有助于理解这个想法。
settingsForm.h
#include <QDialog>
class SettingsForm : public QDialog
{
Q_OBJECT
public:
explicit SettingsForm(QWidget *parent = 0);
~SettingsForm();
// other variables and slots etc.
};
settingsForm.cpp
#include "settingsform.h"
#include "ui_settingsForm.h"
#include <QColorDialog>
SettingsForm::SettingsForm(QWidget *parent) :
QDialog(parent),
ui(new Ui::SettingsForm)
{
ui->setupUi(this);
this->setWindowFlags(Qt::Tool);
// initializing functions
}
SettingsForm::~SettingsForm()
{
delete ui;
}
主窗口.h
#include "settingsForm.h"
// ...
要从主窗口调用 settingsWindow 初始化对象并像 QDialog 一样调用它
主窗口.cpp
settingsform = new SettingsForm(this);
if(settingsform->exec() == QDialog::Accepted){
// update form from settings
}
我还有一个设置类,用于可以使用表单设置的所有变量,它被传递给 settingsForm 并在用户单击“确定”时更新。