0

我有一个可检查的按钮设置为执行/关闭我创建的对话框小部件。

我的想法是当按钮被选中时,它将关闭对话框小部件。如果未选中,则应打开对话框小部件。但我无法让它工作。它继续打开对话框小部件的实例。我只想打开对话框小部件的一个实例。有人可以帮忙吗?

MainDlg::MainDlg()
{
    connect(dialogButton, SIGNAL(clicked()), this, SLOT(setDialog()));
}

void MainDlg::setDialog()
{
   SetDialogDlg setDlg;
   if(dialogButton->isChecked())
   {
      setDlg.close();
   }
   else
   {
      setDlg.exec();
   }
}
4

1 回答 1

1

您的代码中有一些错误。首先,您的SetDialogDlg对象将只存在于您的MainDlg::setDialog()函数内部。一旦此函数完成,您的SetDialogDlg对象将被销毁。

然后,您将创建一个SetDialogDlg每次MainDlg::setDialog()调用函数的新实例。您正在尝试关闭尚未显示的对话框。

然后有一个问题setDlg.exec()。这是一个阻塞函数。dialogButton因此,一旦显示对话框,您甚至都无法推送您的内容。

要解决这些问题,您的MainDlg类中应该有一个成员变量。

//maindlg.h
...
public:
   SetDialogDlg *myDialog;
...

 

//maindlg.cpp
MainDlg::MainDlg()
{
   ...
   myDialog = new SetDialogDlg(this);
   ...
}

  然后在你的MainDlg::setDialog()函数中,调用QWidget::show()而不是QDialog::exec()

void MainDlg::setDialog()
{
   if(dialogButton->isChecked())
   {
      myDialog->close();
   }
   else
   {
      myDialog->show();
   }
}
于 2013-09-20T06:48:15.557 回答