我有一个可检查的按钮设置来执行/关闭我创建的对话框小部件。
我的想法是,当选中按钮时,它将关闭对话框小部件。如果未选中,则应打开对话框小部件。但我无法让它发挥作用。它继续打开对话框小部件的实例。我只想打开对话框小部件的一个实例。有人可以帮忙吗?
MainDlg::MainDlg()
{
connect(dialogButton, SIGNAL(clicked()), this, SLOT(setDialog()));
}
void MainDlg::setDialog()
{
SetDialogDlg setDlg;
if(dialogButton->isChecked())
{
setDlg.close();
}
else
{
setDlg.exec();
}
}
答案 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();
}
}