Russian Qt Forum
Ноябрь 05, 2024, 22:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMainWindow и аналог события OnShow [SOLVED]  (Прочитано 14159 раз)
berrymorr
Гость
« : Март 01, 2009, 11:23 »

как можно ловить сигнал от QMainWindow, появляющийся сразу после показа формы?
« Последнее редактирование: Март 02, 2009, 07:51 от berrymorr » Записан
Армитаж
Гость
« Ответ #1 : Март 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.
Записан
Karl-Philipp
Гость
« Ответ #2 : Март 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 Тему бы перенести из раздела  "Работа с сетью" Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Март 01, 2009, 13:22 »

я делал так:
Код:
bool MainWindow::event(QEvent *p_event)
{
    if( p_event->type() == QEvent::ShowToParent)
        emit SigShow();

    return QWidget::event(p_event);
}
Записан

Юра.
Армитаж
Гость
« Ответ #4 : Март 01, 2009, 15:23 »

получается, что надо переопределить showEvent() и в нём эмитировать собственный сигнал появления QMainWindow?
Более логичного варианта как-то не придумывается.
Записан
berrymorr
Гость
« Ответ #5 : Март 02, 2009, 07:50 »

спасибо!)
правда, не совсем то (оно происходит как раз перед показом формы), но всё равно работает))
понятнее всего показалось решение от terlan'а)
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Март 02, 2009, 09:17 »

2berrymorr  и 2terlan,

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

ArchLinux x86_64 / Win10 64 bit
BRE
Гость
« Ответ #7 : Март 02, 2009, 09:23 »

2berrymorr  и 2terlan,

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

Ругается.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #8 : Март 02, 2009, 09:33 »

Но ведь это не есть хорошо?
Записан

ArchLinux x86_64 / Win10 64 bit
spirit
Гость
« Ответ #9 : Март 02, 2009, 09:39 »

заюзай Q_UNUSED(event); и не будет ругаться
Записан
Армитаж
Гость
« Ответ #10 : Март 02, 2009, 09:54 »

Ещё можно опускать имя аргумента:
Код:
void CustomMainWindow::showEvent(QShowEvent *)
{
    ...
}
Почему-то сам никогда не видел, что бы так писали.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #11 : Март 02, 2009, 10:21 »

2 Армитаж, зато часто имя переменной оборачивают в коментарий:
( QShowEvent * /*event*/ )
Записан

Юра.
berrymorr
Гость
« Ответ #12 : Март 03, 2009, 11:46 »

Ещё можно опускать имя аргумента...
Почему-то сам никогда не видел, что бы так писали.
в одном из примеров kdevelop'а есть такое, кстати (кажется, "qt3 example") ;)
Записан
berrymorr
Гость
« Ответ #13 : Март 03, 2009, 11:59 »

2berrymorr  и 2terlan,

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

ругается. простейший вариант - не использовать переменную event вообще (если ты не собираешься её использовать), т.е., оставить ( QShowEvent *) - cpp такое позволяет делать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.146 секунд. Запросов: 23.