Qt-关闭带有信号/插槽的子菜单

Qt-关闭带有信号/插槽的子菜单,qt,signals-slots,qmainwindow,Qt,Signals Slots,Qmainwindow,我有一个Qt主窗口,在这里我调用另一个窗口,实际上是一种包含第一个窗口参数的子菜单;以下是此主窗口的一部分: void Ui_MainWindow::createSignals() { connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(ICMenu())); } void Ui_MainWindow::ICMenu() { qmenu = new QMainWindow; DiskMenu = new Ui_DiskG

我有一个Qt主窗口,在这里我调用另一个窗口,实际上是一种包含第一个窗口参数的子菜单;以下是此主窗口的一部分:

void Ui_MainWindow::createSignals()
{ 
  connect(actionDisk_galaxy, SIGNAL(triggered()), this,  SLOT(ICMenu()));
}

void Ui_MainWindow::ICMenu()
{
qmenu = new QMainWindow;
DiskMenu = new Ui_DiskGalMenu;
DiskMenu->setupUi(qmenu,this);
setInitialDiskMenuPosition(qmenu, this);
qmenu->show();
}
如您所见,我调用另一个QMainwindow(“
qmenu
”);以下是此新窗口的代码(其类型为“
Ui\u DiskGalMenu
”):

在此子菜单中设置参数后,我想用按钮(此处为“
按钮_4
”)将其关闭

我的问题是,当我点击“按钮4”时,这个窗口没有关闭

我也尝试过重新实现
closeEvent
,但没有成功


任何帮助都很好

此函数调用看起来像一个错误:

close(true);
QWidget::close()不接受任何参数。因此,您在这里要做的是调用C库的close(int)函数(用于关闭文件描述符)。
bool
被隐式转换为
int
,因此您最终得到以下调用:

::close(1);
它(可能)正在关闭
stderr

如果将上述内容更改为:

this->close(true);
由于不存在这样的函数,因此应该会出现编译错误。所以正确的答案应该是:

this->close();
但是,QWidget::close()已经是一个插槽,因此您根本不需要Ui\U DiskGalMenu::closeMenu()函数。您只需连接到close()插槽即可开始:

connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(close()));
如果在窗口关闭时需要执行更多操作,可以重写closeEvent(),该函数将在窗口关闭前调用

connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(close()));