Qt - 使用信号/插槽关闭子菜单
Posted
技术标签:
【中文标题】Qt - 使用信号/插槽关闭子菜单【英文标题】:Qt - Close subMenu with signal/slot 【发布时间】:2012-12-22 06:38:51 【问题描述】:我有一个 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
,但没有成功。
任何帮助都会很棒
【问题讨论】:
【参考方案1】:这个函数调用看起来像个错误:
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(),它会在窗口关闭之前被调用。
【讨论】:
以上是关于Qt - 使用信号/插槽关闭子菜单的主要内容,如果未能解决你的问题,请参考以下文章