Russian Qt Forum

Qt => Вопросы новичков => Тема начата: once_again_abc от Октябрь 23, 2013, 07:53



Название: Диалог не закрывается
Отправлено: once_again_abc от Октябрь 23, 2013, 07:53
Есть свой диалог от QDialog. В нем реализую closeEvent

Код:
void LoadProgressDialog::closeEvent( QCloseEvent* pEvent )
{
    Q_ASSERT( pEvent != 0 );

    if( pEvent->spontaneous() )
    {
        pEvent->ignore(); // Alt + F4
    }
    else
    {
        pEvent->accept();
        emit abort();
    }
}

Из рабочего потока отправляю сообщение:

Код:
    QCloseEvent* pCloseEvent = new QCloseEvent();
    QCoreApplication::postEvent( m_pLoadProgressDialog, pCloseEvent );

Сообщение успешно приходит, получает accept... и все. Окно не исчезает. Добавил принудительно вызов close() - работает, но не нравится. Вопрос - почему так происходит?
При этом, если QCloseEvent приходит от кнопки, то так же выполняется блок else { ... } и окно закрывается!

версия 4.6.2


Название: Re: Диалог не закрывается
Отправлено: _OLEGator_ от Октябрь 23, 2013, 08:45
Наверняка надо пробросить событие дальше, чтобы базовый класс его отработал:
Код
C++ (Qt)
void LoadProgressDialog::closeEvent( QCloseEvent* pEvent )
{
   Q_ASSERT( pEvent != 0 );
 
   if( pEvent->spontaneous() )
   {
       pEvent->ignore(); // Alt + F4
   }
   else
   {
       pEvent->accept();
       emit abort();
       QDialog::closeEvent(pEvent);
   }
}


Название: Re: Диалог не закрывается
Отправлено: once_again_abc от Октябрь 23, 2013, 09:22
чьорт побьери! как же я мог забыть =) спасибо _OLEGator_!