Qt - 用信号/插槽关闭subMenu

时间:2012-12-22 06:38:51

标签: 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_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,但没有成功。

任何帮助都会很棒

1 个答案:

答案 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()。