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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Поймать изменение размера QDockWidget  (Прочитано 4975 раз)
bosfor
Гость
« : Июнь 09, 2010, 15:34 »

Подскажите плиз.

Имею несколько QDockWidget`тов на QMainWindow
как мне отловить изменение размеров приклееных dock виджетов ?
Записан
DS_tm
Гость
« Ответ #1 : Июнь 10, 2010, 11:30 »

Создаете класс наследник от QDockWidget и переопределяете
void QWidget::resizeEvent (QResizeEvent *event)   [virtual protected] таким образом, чтобы она высылала сигнал.
Записан
Barmaglodd
Гость
« Ответ #2 : Июнь 10, 2010, 11:37 »

Можно eventFilter установить и от QDockWidget не надо наследоваться.
Записан
DS_tm
Гость
« Ответ #3 : Июнь 10, 2010, 11:44 »

Можно eventFilter установить и от QDockWidget не надо наследоваться.
Ну или так да, хотя меня фильтрация сообщений не прельщает своей плохой наглядностью, да и судя по вопросу человеку будет проще наследовать нежели изучать механизм фильтрации.
Записан
bosfor
Гость
« Ответ #4 : Июнь 10, 2010, 17:08 »

Спасибо ! Первый вариант переопределения функции выручил. Правда пришлось свой сигнал делать
Код:
void MyResizeEvent(QResizeEvent *event);
так как данные мне удобно обрабатывать в классе главного окна .
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #5 : Июнь 10, 2010, 17:44 »

я бы так не делал... важно понимать почему есть система эвентов, а не посылка сигнала аппликейшном, сконнекченным с классом. Такие события как перемещение мыши и изменение размера происходят часто, а сигналы/слоты медленные (не очень, но все ж). Так что стоит подумать, адекватно ли такое частое кидание сигнала на каждый приход резайз эвента.
Записан
DS_tm
Гость
« Ответ #6 : Июнь 10, 2010, 20:40 »

Согласен, делегирование обязанности главному окну с помощью сигнала решение не лучшее, вся прелесть сигналов в том, что инициатор сигнала ничего не знает о получателе(ях), но за это приходиться платить производительностью. В Вашем случае лучше передать указатель на объект главного окна в конструкторе класса наследника QDockWidget (а Вы это наверняка итак делаете) а далее в обработчике resize вызывать соответствующую функцию главного окна напрямую, передавая в качестве параметра this.

Код
C++ (Qt)
void MyDockWidget::resize(QResizeEvent *event) {
 mainWindow->someFunction(event, this);
}
 
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #7 : Июнь 10, 2010, 20:47 »

в нашем случае на доквиджет вешается эвент фильтр - само главное окно. Криво архитектурно (но лишь потенциально), зато просто и производительно
Записан
bosfor
Гость
« Ответ #8 : Июнь 11, 2010, 08:47 »

Код
C++ (Qt)
void MyDockWidget::resize(QResizeEvent *event) {
 mainWindow->someFunction(event, this);
}
 
спасибо, учту рекомендации.

в нашем случае на доквиджет вешается эвент фильтр - само главное окно. Криво архитектурно (но лишь потенциально), зато просто и производительно
механизмом фильтра непользовался, буду благодарен за ссылочуку или короткий пример кода.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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