gpt4 book ai didi

qt - 在 Qt 中显示子窗口时暂停功能

转载 作者:行者123 更新时间:2023-12-04 12:53:10 25 4
gpt4 key购买 nike

在 Qt Creator 中,我有一个主窗口和一个 QWidget 作为工具窗口 (setWindowFlags(Qt::tool))。当我调用工具窗口时,用户可以更改一些设置。然后,这些更改会改变主窗口中的一些数据。

我创建了小部件,显示它,然后我想更新主窗口中的数据,但该函数不等待小部件关闭。所以演出后的更新程序被立即执行并且没有效果。当我显示 QMessageBox 时,该函数等待用户关闭它。

我可以为 QWidget 设置标志或其他东西以便函数等待吗?

void userclicksonsettings(){
settings = new Settings(this); // Settings is a QWidget-class with ui
settings->show();
// function should wait till settings is closed
// set up mainwindow with new values
}

谢谢。

最佳答案

我刚刚解决了它。使用 QDialog 而不是 QWidget 作为基类允许调用窗口 QDialog::exec();并且父窗口小部件将暂停,直到窗口再次关闭。

编辑:这是我刚刚从备份磁盘中挖出的解决方案的来源。不过我不得不说,我上次使用 Qt 和这段代码是几年前的事了,所以它可能不正确。我希望它有助于理解这个想法。

设置表单.h

#include <QDialog>
class SettingsForm : public QDialog
{
Q_OBJECT

public:
explicit SettingsForm(QWidget *parent = 0);
~SettingsForm();
// other variables and slots etc.
};

设置表单.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 并在用户单击“确定”时更新。

关于qt - 在 Qt 中显示子窗口时暂停功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11592832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com