Russian Qt Forum

Qt => Общие вопросы => Тема начата: lighting от Июнь 03, 2010, 15:30



Название: Переопределение функций show и hide
Отправлено: lighting от Июнь 03, 2010, 15:30
Хотел переопределить поведение диалоговых окно при hide и show, отнаследовался от QDialog
Код
C++ (Qt)
class Dialog : public QDialog
{
   Q_OBJECT
 
public:
   Dialog(QWidget *parent = 0);
   ~Dialog();
  ...
private slots:
   void show();
   void hide();
...
};

Написал новые обработчики
Код
C++ (Qt)
Dialog::Dialog(QWidget *parent)
{
// initialization
}
 
Dialog::~Dialog()
{
}
 
void Dialog::show()
{
// show new code
}
 
void Dialog::hide()
{
// hide new code
}
Проверяю в дебаггере - в мои методы программа не заходит, show  и hide используются стандартные. В чем может быть проблема?


Название: Re: Переопределение функций show и hide
Отправлено: BRE от Июнь 03, 2010, 15:31
В чем может быть проблема?
В том, что они не виртуальные методы.


Название: Re: Переопределение функций show и hide
Отправлено: lighting от Июнь 03, 2010, 15:39
т.е. переопределять можно только виртуальные методы и в моем случае этого сделать нельзя в принципе, только объобными путями отлавливая все события при которых может быть вызван show и hide и подставлять туда свои обработчики?


Название: Re: Переопределение функций show и hide
Отправлено: BRE от Июнь 03, 2010, 15:44
т.е. переопределять можно только виртуальные методы и в моем случае этого сделать нельзя в принципе, только объобными путями отлавливая все события при которых может быть вызван show и hide и подставлять туда свои обработчики?
Посмотри на метод:
virtual void   setVisible ( bool visible )


Название: Re: Переопределение функций show и hide
Отправлено: insamo от Июнь 03, 2010, 15:48
В чем может быть проблема?
В том, что они не виртуальные методы.

Ты ошибся они виртуальные
смотри сюда http://doc.trolltech.com/3.0/qdialog.html#showExtension

void QDialog::show () [virtual]


Название: Re: Переопределение функций show и hide
Отправлено: crossly от Июнь 03, 2010, 15:50
В чем может быть проблема?
В том, что они не виртуальные методы.
а кто сказал что не виртуальные переопределять нельзя... ??


Название: Re: Переопределение функций show и hide
Отправлено: MoPDoBoPoT от Июнь 03, 2010, 15:51
private slots:
...

А вообще, если хочешь задать свое поведение при скрытии/отображении, а не только, когда явно вызываются эти слоты, то надо пререопределять  hideEvent()/showEvent().


Название: Re: Переопределение функций show и hide
Отправлено: MoPDoBoPoT от Июнь 03, 2010, 15:52
Ты ошибся они виртуальные
смотри сюда http://doc.trolltech.com/3.0/qdialog.html#showExtension
Версия Qt 3...


Название: Re: Переопределение функций show и hide
Отправлено: insamo от Июнь 03, 2010, 15:53
В чем может быть проблема?
В том, что они не виртуальные методы.
а кто сказал что не виртуальные переопределять нельзя... ??

Тогда где ты здесь проблему видишь, из контекста постов, оно так и выходит


Название: Re: Переопределение функций show и hide
Отправлено: insamo от Июнь 03, 2010, 15:58
Ты ошибся они виртуальные
смотри сюда http://doc.trolltech.com/3.0/qdialog.html#showExtension
Версия Qt 3...

сори :-X


Название: Re: Переопределение функций show и hide
Отправлено: lighting от Июнь 03, 2010, 16:06
BRE, MoPDoBoPoT - в моем случае эти способы не подходят. Я хотел реализовать плавное проявление окна для show и растворение для hide. setVisible не поможет при закрытии окна напр. по Esc, а эвенты это хорошо, но при Hide напр. мое плавное затухание не успеет себя проявить - окно исчезнет мгновенно.
Цитировать
а кто сказал что не виртуальные переопределять нельзя... ??
это я предположил из ответа BRE


Название: Re: Переопределение функций show и hide
Отправлено: lit-uriy от Июнь 03, 2010, 16:27
>>а кто сказал что не виртуальные переопределять нельзя... ??
дык, их ни когда нельзя было переопределять. Только перегружать, а это не одно и тоже.


Название: Re: Переопределение функций show и hide
Отправлено: Alex Custov от Июнь 03, 2010, 16:31
BRE, MoPDoBoPoT - в моем случае эти способы не подходят. Я хотел реализовать плавное проявление окна для show и растворение для hide. setVisible не поможет при закрытии окна напр. по Esc, а эвенты это хорошо, но при Hide напр. мое плавное затухание не успеет себя проявить - окно исчезнет мгновенно.

А как? Я тоже делал несколько типов затухания, большая проблема в том, что они жоско тормозят. Спасает только использование композитного менеджера и специального затухания, заточенного под него.


Название: Re: Переопределение функций show и hide
Отправлено: Alex Custov от Июнь 03, 2010, 16:37
>>а кто сказал что не виртуальные переопределять нельзя... ??
дык, их ни когда нельзя было переопределять. Только перегружать, а это не одно и тоже.

если быть точным, то

http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/575631e6ba581ee6/d4e4c36db398d560?hl=ru&q=overloading+overriding+hiding


Название: Re: Переопределение функций show и hide
Отправлено: crossly от Июнь 03, 2010, 16:43
>>а кто сказал что не виртуальные переопределять нельзя... ??
дык, их ни когда нельзя было переопределять. Только перегружать, а это не одно и тоже.
простите за терминологию....
по вопросу..... по моему товарисч MoPDoBoPoT указал на проблему в коде
Код:
private slots:


Название: Re: Переопределение функций show и hide
Отправлено: lighting от Июнь 03, 2010, 21:34
А как? Я тоже делал несколько типов затухания, большая проблема в том, что они жоско тормозят. Спасает только использование композитного менеджера и специального затухания, заточенного под него.
Да обычно, setWindowOpacity + QTimeLine... Разрабатывать только начал, так что графику еще не накручивал, но пока особых тормозов не заметил.


Название: Re: Переопределение функций show и hide
Отправлено: Alex Custov от Июнь 03, 2010, 23:34
А как? Я тоже делал несколько типов затухания, большая проблема в том, что они жоско тормозят. Спасает только использование композитного менеджера и специального затухания, заточенного под него.
Да обычно, setWindowOpacity + QTimeLine... Разрабатывать только начал, так что графику еще не накручивал, но пока особых тормозов не заметил.

setWindowOpacity работает только в композитном WM - тормозов нет (и то только на нормальном железе и дровах), но композитного менеджера не у каждого встретишь.