Russian Qt Forum
Ноябрь 05, 2024, 22:04
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Событие перед переключением tab
Страниц:
1
2
[
3
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Событие перед переключением tab (Прочитано 20918 раз)
BRE
Гость
Re: Событие перед переключением tab
«
Ответ #30 :
Октябрь 30, 2009, 19:25 »
Цитата: cdsmika от Октябрь 30, 2009, 19:12
Таким образом, делаем вывод: для того, чтобы выдавать разрешение на смену текущего фрейма мне нужно ограничить использование интерфейса, вместо того, чтобы просто использовать событие перед переключением (такое событие в тулбаре есть во всех средах разработки, акромя Qt).
Просто пока я не нахожу единомышленников, считающих, что данный сигнал нужен и нужен он практически в каждом контейнере, позволяющем переключение фрэймов.
Так может сделать самому?
QTabBar + QStackedWidget.
Можно добавить всяких сигналов: до, в процессе и после переключения.
Это если нужно...
Записан
cdsmika
Гость
Re: Событие перед переключением tab
«
Ответ #31 :
Октябрь 30, 2009, 19:30 »
Цитата: BRE от Октябрь 30, 2009, 19:25
Цитата: cdsmika от Октябрь 30, 2009, 19:12
Таким образом, делаем вывод: для того, чтобы выдавать разрешение на смену текущего фрейма мне нужно ограничить использование интерфейса, вместо того, чтобы просто использовать событие перед переключением (такое событие в тулбаре есть во всех средах разработки, акромя Qt).
Просто пока я не нахожу единомышленников, считающих, что данный сигнал нужен и нужен он практически в каждом контейнере, позволяющем переключение фрэймов.
Так может сделать самому?
QTabBar + QStackedWidget.
Можно добавить всяких сигналов: до, в процессе и после переключения.
Это если нужно...
Можно и так. Только тогда придется переписывать практически весь QTabWidget. QStackedWidget совсем уж пустой.
Эх, так не хотелось как и в Qt3 все стандартные классы переопределять из-за тривиальных задач...
Записан
BRE
Гость
Re: Событие перед переключением tab
«
Ответ #32 :
Октябрь 30, 2009, 19:32 »
Цитата: cdsmika от Октябрь 30, 2009, 19:30
Можно и так. Только тогда придется переписывать практически весь QTabWidget. QStackedWidget совсем уж пустой.
Эх, так не хотелось как и в Qt3 все стандартные классы переопределять из-за тривиальных задач...
Можно попробовать сделать свой TabBar с нужным функционалом и устанавливать его в готовый QTabWidget.
Записан
cdsmika
Гость
Re: Событие перед переключением tab
«
Ответ #33 :
Октябрь 30, 2009, 19:35 »
Цитата: BRE от Октябрь 30, 2009, 19:32
Цитата: cdsmika от Октябрь 30, 2009, 19:30
Можно и так. Только тогда придется переписывать практически весь QTabWidget. QStackedWidget совсем уж пустой.
Эх, так не хотелось как и в Qt3 все стандартные классы переопределять из-за тривиальных задач...
Можно попробовать сделать свой TabBar с нужным функционалом и устанавливать его в готовый QTabWidget.
Попробую
Записан
SABROG
Гость
Re: Событие перед переключением tab
«
Ответ #34 :
Октябрь 30, 2009, 21:26 »
Цитата: cdsmika от Октябрь 25, 2009, 18:08
Цитата: alFoX от Октябрь 25, 2009, 14:18
Держи в переменной индекс текущего таба и отлавливай сигнал изменения таба. Если нужно, возвращай юзера в таб с сохраненным ранее индексом.
Ну это ж кривизна. Этот сигнал срабатывает уже после инициализации нового таба, а это довольно долгий процесс (загрузка данных из БД). Почему в Qt события не подразделяются на до и после?
Из всего предложенного это самый логичный и простой вариант. К тому же я не помню такого, чтобы Qt чего-то сама пыталсь из БД загрузить по смене вкладки. Скорее всего это твой код и его можно переписать таким образом, чтобы загрузка происходила только при удовлетворительном условии. Если действительно присутствует факт того,что модель пытается обращаться к БД из-за того, что виджет стал видимым и работает перерисовка, то можно воспользоваться методом setUpdatesEnabled для всего виджета вкладки. В общем варианты есть.
Кстати можно поголосовать (vote) за внедрение этой фичи, раз уж тролли не против,
тут
«
Последнее редактирование: Октябрь 30, 2009, 23:19 от SABROG
»
Записан
cdsmika
Гость
Re: Событие перед переключением tab
«
Ответ #35 :
Октябрь 31, 2009, 10:43 »
Цитата: SABROG от Октябрь 30, 2009, 21:26
Цитата: cdsmika от Октябрь 25, 2009, 18:08
Цитата: alFoX от Октябрь 25, 2009, 14:18
Держи в переменной индекс текущего таба и отлавливай сигнал изменения таба. Если нужно, возвращай юзера в таб с сохраненным ранее индексом.
Ну это ж кривизна. Этот сигнал срабатывает уже после инициализации нового таба, а это довольно долгий процесс (загрузка данных из БД). Почему в Qt события не подразделяются на до и после?
Из всего предложенного это самый логичный и простой вариант. К тому же я не помню такого, чтобы Qt чего-то сама пыталсь из БД загрузить по смене вкладки. Скорее всего это твой код и его можно переписать таким образом, чтобы загрузка происходила только при удовлетворительном условии. Если действительно присутствует факт того,что модель пытается обращаться к БД из-за того, что виджет стал видимым и работает перерисовка, то можно воспользоваться методом setUpdatesEnabled для всего виджета вкладки. В общем варианты есть.
Кстати можно поголосовать (vote) за внедрение этой фичи, раз уж тролли не против,
тут
Код то мой. Загрузка осуществляется в том же обработчике onCurrentChanged(), но он срабатывает уже после смены. Сама модель естественно ничего не запрашивает при прорисовке виджета.
Фичу постил уже месяц назад троллям, но пока они отмалчиваются.
Записан
SABROG
Гость
Re: Событие перед переключением tab
«
Ответ #36 :
Октябрь 31, 2009, 13:01 »
Цитата: cdsmika от Октябрь 31, 2009, 10:43
но он срабатывает уже после смены.
Ну и пусть срабатывает, ты главное сохраняй при загрузке формы текущую выбранную вкладку куда-нибудь и обновляй переменную при любой смене вкладки уже после того как ты позволишь сменить её на новую. Тут же смысл в том, чтобы вернуть пользователя на предыдущую вкладку с которой он пришел на новую, а currentIndex() и index в currentChanged будут равны. Визуально пользователь будет видеть смену вкладки на новую и обратно.
Записан
Страниц:
1
2
[
3
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...