Qt Как узнать, где произошло событие closeEvent (событие QCloseEvent *) - PullRequest
1 голос
/ 23 января 2012

У меня в главном окне 2 триггера 1. из меню, которое закрыто всего приложение 2. из окна Х кнопка, которая игнорируется и просто скрывает окно. Я использую этот сигнал / слоты как я могу узнать откуда это происходит?

В 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 ]

3 голосов
/ 23 января 2012

Вы всегда можете узнать, кто "запустил" событие, вызвав QObject :: sender () - http://developer.qt.nokia.com/doc/qt-4.8/qobject.html#sender. Обратите внимание, что допустимое возвращаемое значение доступно только тогда, когда этот метод вызывается на вызываемом слоте.

Edit:

Если вы повторно подключаете несколько сигналов к одному слоту, вам также следует рассмотреть возможность использования преобразователя сигналов, что объясняется в этом QQ: http://doc.qt.nokia.com/qq/qq10-signalmapper.html

2 голосов
/ 23 января 2012

Возможны два решения:

  1. подключить сигнал пункта меню (QAction) к отдельному слоту и вызвать qApp->quit() там
  2. использовать sender() метод внутри вашего слотачтобы определить объект, который послал сигнал

Я бы предпочел первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...