如何在Qt中打开子窗口时禁用父窗口?

3

我希望禁止主窗口的任何操作,包括关闭,同时保持子窗口打开。

我尝试:

// child window
Settings::Settings(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Settings)
{
    ui->setupUi(this);
    ((QWidget*)parent)->setEnabled(false); // or parent->setEnabled(false);
 ...

设置->显示();时出现分段错误。

我尝试从设置构造函数/析构函数发送信号到MainClass插槽。

void MainClass::Enable(bool enable)
{
  qDebug() << "detect signal enable"; // 
  this->setEnable(enable);
}

但是信号没有被发送。
当然,我将Settings连接到MainClass))。 在Settings的任何其他函数中都可以发出信号。

1
我想禁止主窗口中的任何操作,包括关闭它。通常情况下,为此可以将设置作为(模态)QDialog。但是,如果父对象指向有效对象,我不认为这会导致崩溃。(在调试器中运行它) - Frank Osterfeld
1个回答

6
对于子窗口,最好继承自QDialog(而不是QWidget),因为第一个是专门设计用于对话框的。来自Qt文档:

QDialog类是对话框窗口的基类。

你需要的方法是QDialog::exec()。它将你的对话框作为模态窗口打开,这会阻止其他应用程序窗口的输入,直到它被关闭。

@JohnDoe 我们如何从QDialog模态窗口访问父类widget? - Narendra Prasath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接