Qt如何找出closeEvent(QCloseEvent *事件)触发的位置

时间:2012-01-23 09:23:22

标签: c++ qt

我在主窗口中有2个触发器 1.从完全关闭应用程序的菜单中 2.从他的窗口X按钮忽略,只是隐藏窗口。 我正在使用这个SIGNAL / SLOTS 我怎么知道它被触发的位置?

closeEvent

connect(ui->actionQuit, SIGNAL(triggered()),this, SLOT(CloseWin()));

void MainWindow::CloseWin()
{

   close();

}
// triggered from the ui->actionQuit amd from the X button

void MainWindow::closeEvent(QCloseEvent *event)
{

    // how can i know from where its bean triggered?     
    hide();
        event->ignore();

}

2 个答案:

答案 0 :(得分:3)

通过调用QObject :: sender() - http://developer.qt.nokia.com/doc/qt-4.8/qobject.html#sender,您始终可以知道谁“解雇”了该事件。请注意,只有在调用SLOT上调用此方法时,才能使用有效的返回值。

编辑:

如果您将多个信号连接到一个插槽,您还应该考虑使用信号映射器,这在此QQ中有说明: http://doc.qt.nokia.com/qq/qq10-signalmapper.html

答案 1 :(得分:2)

可能有两种解决方案:

  1. 将菜单项(QAction)信号连接到单独的广告位并致电qApp->quit()
  2. 在插槽中使用sender()方法来确定发送信号的对象
  3. 我更喜欢第一个。