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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Событие перед переключением tab  (Прочитано 20801 раз)
BRE
Гость
« Ответ #30 : Октябрь 30, 2009, 19:25 »

Таким образом, делаем вывод: для того, чтобы выдавать разрешение на смену текущего фрейма мне нужно ограничить использование интерфейса, вместо того, чтобы просто использовать событие перед переключением (такое событие в тулбаре есть во всех средах разработки, акромя Qt).
Просто пока я не нахожу единомышленников, считающих, что данный сигнал нужен и нужен он практически в каждом контейнере, позволяющем переключение фрэймов.
Так может сделать самому?
QTabBar + QStackedWidget.
Можно добавить всяких сигналов: до, в процессе и после переключения.
Это если нужно...  Подмигивающий
Записан
cdsmika
Гость
« Ответ #31 : Октябрь 30, 2009, 19:30 »

Таким образом, делаем вывод: для того, чтобы выдавать разрешение на смену текущего фрейма мне нужно ограничить использование интерфейса, вместо того, чтобы просто использовать событие перед переключением (такое событие в тулбаре есть во всех средах разработки, акромя Qt).
Просто пока я не нахожу единомышленников, считающих, что данный сигнал нужен и нужен он практически в каждом контейнере, позволяющем переключение фрэймов.
Так может сделать самому?
QTabBar + QStackedWidget.
Можно добавить всяких сигналов: до, в процессе и после переключения.
Это если нужно...  Подмигивающий
Можно и так. Только тогда придется переписывать практически весь QTabWidget. QStackedWidget совсем уж пустой.
Эх, так не хотелось как и в Qt3 все стандартные классы переопределять из-за тривиальных задач...
Записан
BRE
Гость
« Ответ #32 : Октябрь 30, 2009, 19:32 »

Можно и так. Только тогда придется переписывать практически весь QTabWidget. QStackedWidget совсем уж пустой.
Эх, так не хотелось как и в Qt3 все стандартные классы переопределять из-за тривиальных задач...
Можно попробовать сделать свой TabBar с нужным функционалом и устанавливать его в готовый QTabWidget.
Записан
cdsmika
Гость
« Ответ #33 : Октябрь 30, 2009, 19:35 »

Можно и так. Только тогда придется переписывать практически весь QTabWidget. QStackedWidget совсем уж пустой.
Эх, так не хотелось как и в Qt3 все стандартные классы переопределять из-за тривиальных задач...
Можно попробовать сделать свой TabBar с нужным функционалом и устанавливать его в готовый QTabWidget.
Попробую
Записан
SABROG
Гость
« Ответ #34 : Октябрь 30, 2009, 21:26 »

Держи в переменной индекс текущего таба и отлавливай сигнал изменения таба. Если нужно, возвращай юзера в таб с сохраненным ранее индексом.
Ну это ж кривизна. Этот сигнал срабатывает уже после инициализации нового таба, а это довольно долгий процесс (загрузка данных из БД). Почему в Qt события не подразделяются на до и после?

Из всего предложенного это самый логичный и простой вариант. К тому же я не помню такого, чтобы Qt чего-то сама пыталсь из БД загрузить по смене вкладки. Скорее всего это твой код и его можно переписать таким образом, чтобы загрузка происходила только при удовлетворительном условии. Если действительно присутствует факт того,что модель пытается обращаться к БД из-за того, что виджет стал видимым и работает перерисовка, то можно воспользоваться методом setUpdatesEnabled для всего виджета вкладки. В общем варианты есть.

Кстати можно поголосовать (vote) за внедрение этой фичи, раз уж тролли не против, тут
« Последнее редактирование: Октябрь 30, 2009, 23:19 от SABROG » Записан
cdsmika
Гость
« Ответ #35 : Октябрь 31, 2009, 10:43 »

Держи в переменной индекс текущего таба и отлавливай сигнал изменения таба. Если нужно, возвращай юзера в таб с сохраненным ранее индексом.
Ну это ж кривизна. Этот сигнал срабатывает уже после инициализации нового таба, а это довольно долгий процесс (загрузка данных из БД). Почему в Qt события не подразделяются на до и после?

Из всего предложенного это самый логичный и простой вариант. К тому же я не помню такого, чтобы Qt чего-то сама пыталсь из БД загрузить по смене вкладки. Скорее всего это твой код и его можно переписать таким образом, чтобы загрузка происходила только при удовлетворительном условии. Если действительно присутствует факт того,что модель пытается обращаться к БД из-за того, что виджет стал видимым и работает перерисовка, то можно воспользоваться методом setUpdatesEnabled для всего виджета вкладки. В общем варианты есть.

Кстати можно поголосовать (vote) за внедрение этой фичи, раз уж тролли не против, тут
Код то мой. Загрузка осуществляется в том же обработчике onCurrentChanged(), но он срабатывает уже после смены. Сама модель естественно ничего не запрашивает при прорисовке виджета.
Фичу постил уже месяц назад троллям, но пока они отмалчиваются.
Записан
SABROG
Гость
« Ответ #36 : Октябрь 31, 2009, 13:01 »

но он срабатывает уже после смены.

Ну и пусть срабатывает, ты главное сохраняй при загрузке формы текущую выбранную вкладку куда-нибудь и обновляй переменную при любой смене вкладки уже после того как ты позволишь сменить её на новую. Тут же смысл в том, чтобы вернуть пользователя на предыдущую вкладку с которой он пришел на новую, а currentIndex() и index в currentChanged будут равны. Визуально пользователь будет видеть смену вкладки на новую и обратно.
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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