0

我有一个 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”)关闭它。

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

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

任何帮助都会很棒

4

1 回答 1

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

于 2012-12-22T07:45:05.353 回答