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



我有一个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(),在窗口关闭之前将调用。

相关内容

  • 没有找到相关文章

最新更新