我有一个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(此处为“pushButton_4
”)关闭它。
我的问题是,当我点击“pushButton_4”时,此窗口不会关闭。
我也尝试重新实现closeEvent
,但没有成功。
任何帮助都会很棒
答案 0 :(得分:0)
这个函数调用看起来像是一个错误:
close(true);
QWidget :: close()不接受任何参数。所以你在这里做的是调用C库的close(int)函数(用于关闭文件描述符。)bool
被隐式转换为int
,所以你最终得到这个调用:
::close(1);
哪(可能)关闭stderr
。
如果将上述内容更改为:
,您可以看到发生了什么this->close(true);
您应该收到编译错误,因为不存在此类函数。所以正确的电话会是:
this->close();
但是,QWidget :: close()已经是一个插槽,所以根本不需要Ui_DiskGalMenu :: closeMenu()函数。您所需要的只是连接到close()插槽开头:
connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(close()));
如果你需要在窗口关闭时做更多的事情,你可以覆盖在窗口关闭之前调用的closeEvent()。