我有一个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_DiskGalMenu
"):
void Ui_DiskGalMenu::createMenuSignals()
{
connect(pushButton_4, SIGNAL(clicked()), this, SLOT(closeMenu()));
}
void Ui_DiskGalMenu::closeMenu()
{
close(true);
}
在此子菜单中设置参数后,我想用按钮将其关闭( pushButton_4
&quot')。
我的问题是,当我单击" pushbutton_4"时,此窗口不会关闭。
我也尝试重新进来closeEvent
,但没有成功。
此功能调用看起来像一个错误:
close(true);
Qwidget :: Close()不使用任何参数。因此,您在这里所做的是调用C库的关闭(INT)函数(用于关闭文件描述符。)bool
隐式转换为int
,因此您最终会得到此调用:
::close(1);
是(可能)关闭stderr
。
如果将上述更改为:
,您可以看到发生了什么this->close(true);
由于不存在此类功能,因此您应该遇到汇编错误。因此,正确的电话将是:
this->close();
但是,Qwidget :: Close()已经是一个插槽,因此您根本不需要UI_Diskgalmenu :: CleaseMenu()函数。您需要的只是连接到关闭()插槽以开始:
connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(close()));
如果您需要在窗口关闭时需要做更多的事情,则可以覆盖CloseEvent(),在窗口关闭之前将调用。