Qt PushButton exec小部件

时间:2013-09-20 01:49:06

标签: qt exec qpushbutton

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

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

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

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

1 个答案:

答案 0 :(得分: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();
   }
}