Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: berrymorr от Март 01, 2009, 11:23



Название: QMainWindow и аналог события OnShow [SOLVED]
Отправлено: berrymorr от Март 01, 2009, 11:23
как можно ловить сигнал от QMainWindow, появляющийся сразу после показа формы?


Название: Re: QMainWindow и аналог события OnShow
Отправлено: Армитаж от Март 01, 2009, 11:53
void QWidget::showEvent ( QShowEvent * event )   [virtual protected]
This event handler can be reimplemented in a subclass to receive widget show events which are passed in the event parameter.
Non-spontaneous show events are sent to widgets immediately before they are shown. The spontaneous show events of windows are delivered afterwards.
Note: A widget receives spontaneous show and hide events when its mapping status is changed by the window system, e.g. a spontaneous hide event when the user minimizes the window, and a spontaneous show event when the window is restored again. After receiving a spontaneous hide event, a widget is still considered visible in the sense of isVisible().
See also visible, event(), and QShowEvent.


Название: Re: QMainWindow и аналог события OnShow
Отправлено: Karl-Philipp от Март 01, 2009, 13:04
получается, что надо переопределить showEvent() и в нём эмитировать собственный сигнал появления QMainWindow?
Код
C++ (Qt)
class CustomMainWindow : public QMainWindow
{
    Q_OBJECT
...
  signals:
     void signalMainWindowShown();
  protected:
     void showEvent(QShowEvent * event);
...
};
 
void CustomMainWindow::showEvent ( QShowEvent * event )
{
   emit signalMainWindowShown();
}

я правильно понял?
-----------------------------------------------------------
ps Тему бы перенести из раздела  "Работа с сетью" :)


Название: Re: QMainWindow и аналог события OnShow
Отправлено: lit-uriy от Март 01, 2009, 13:22
я делал так:
Код:
bool MainWindow::event(QEvent *p_event)
{
    if( p_event->type() == QEvent::ShowToParent)
        emit SigShow();

    return QWidget::event(p_event);
}


Название: Re: QMainWindow и аналог события OnShow
Отправлено: Армитаж от Март 01, 2009, 15:23
получается, что надо переопределить showEvent() и в нём эмитировать собственный сигнал появления QMainWindow?
Более логичного варианта как-то не придумывается.


Название: Re: QMainWindow и аналог события OnShow
Отправлено: berrymorr от Март 02, 2009, 07:50
спасибо!)
правда, не совсем то (оно происходит как раз перед показом формы), но всё равно работает))
понятнее всего показалось решение от terlan'а)


Название: Re: QMainWindow и аналог события OnShow [SOLVED]
Отправлено: kuzulis от Март 02, 2009, 09:17
2berrymorr  и 2terlan,

скажите, а в вашем примере компилятор не ругается варнингами на то, что в
Код:
void CustomMainWindow::showEvent ( QShowEvent * event )
{
    emit signalMainWindowShown();
}
параметр event  нигде не используется ?


Название: Re: QMainWindow и аналог события OnShow [SOLVED]
Отправлено: BRE от Март 02, 2009, 09:23
2berrymorr  и 2terlan,

скажите, а в вашем примере компилятор не ругается варнингами на то, что в
Код:
void CustomMainWindow::showEvent ( QShowEvent * event )
{
    emit signalMainWindowShown();
}
параметр event  нигде не используется ?

Ругается.


Название: Re: QMainWindow и аналог события OnShow [SOLVED]
Отправлено: kuzulis от Март 02, 2009, 09:33
Но ведь это не есть хорошо?


Название: Re: QMainWindow и аналог события OnShow [SOLVED]
Отправлено: spirit от Март 02, 2009, 09:39
заюзай Q_UNUSED(event); и не будет ругаться


Название: Re: QMainWindow и аналог события OnShow [SOLVED]
Отправлено: Армитаж от Март 02, 2009, 09:54
Ещё можно опускать имя аргумента:
Код:
void CustomMainWindow::showEvent(QShowEvent *)
{
    ...
}
Почему-то сам никогда не видел, что бы так писали.


Название: Re: QMainWindow и аналог события OnShow [SOLVED]
Отправлено: lit-uriy от Март 02, 2009, 10:21
2 Армитаж, зато часто имя переменной оборачивают в коментарий:
( QShowEvent * /*event*/ )


Название: Re: QMainWindow и аналог события OnShow [SOLVED]
Отправлено: berrymorr от Март 03, 2009, 11:46
Ещё можно опускать имя аргумента...
Почему-то сам никогда не видел, что бы так писали.
в одном из примеров kdevelop'а есть такое, кстати (кажется, "qt3 example") ;)


Название: Re: QMainWindow и аналог события OnShow [SOLVED]
Отправлено: berrymorr от Март 03, 2009, 11:59
2berrymorr  и 2terlan,

скажите, а в вашем примере компилятор не ругается варнингами на то, что в
Код:
void CustomMainWindow::showEvent ( QShowEvent * event )
{
    emit signalMainWindowShown();
}
параметр event  нигде не используется ?

ругается. простейший вариант - не использовать переменную event вообще (если ты не собираешься её использовать), т.е., оставить ( QShowEvent *) - cpp такое позволяет делать.