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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: прятание QToolBar  (Прочитано 7208 раз)
L.Marvell
Гость
« : Июль 15, 2005, 11:17 »

Всем привет!

Проблемка в следующем: есть приложение с тулбаром, а также есть меню с пунктом "показать тулбар", здесь все работает хорошо. Кликаем показать, тулбар появляется и пункт меню отмечен галочкой, убираем галочку, тулбар прячется. Но, тулбар можно спрятать через его контекстное меню и тогда естественно меню не реагирует, и остается в состоянии ON. Никак не могу понять на какой сигнал тулбара вешать собственный слот. Помогите пожалуйста.
Записан
lepsai
Гость
« Ответ #1 : Июль 15, 2005, 12:13 »

void visibilityChanged ( bool visible )  (QDockWindow)
Записан
L.Marvell
Гость
« Ответ #2 : Июль 15, 2005, 12:51 »

Извините, я не сказал, что пользую Qt4. В принципе данный сигнал присутствует в Q3DockWindow, но хотелось бы знать, как сделать с помощью именно Qt4.
Записан
Телков Сергей
Гость
« Ответ #3 : Июль 26, 2005, 08:33 »

Можешь использовать следующий подход.

На сигнал aboutToShow() твоего меню вешаешь слот. В этом слоте пробегаешь по всем пунктам меню, касающимся тулбаров и обновляешь их состояние (QPopupMenu::setItemChecked()) используя результат возвращаемый функцией тулбара isVisible() (лучше isVisibleTo( <главное_окно_приложения> ).

Можно меню очищать и заново добавлять в него все пункты меню с их статусами, основываясь на списке тулбаров (dock windows), взятому у главного окна (QMainWindow). Таким образом в меню всегда будет достоверная информация обо всех тулбарах, независимо от того когда они добавились/удалились/скрылись/показались. Если еще и список тулбаров фильтровать с использованием функции QMainWindow::isAppropriate(), то тогда меню будет похоже на контекстное меню.

Не знаю как в Qt 4, но в версиях 2 и 3 такой способ вполне применим. Для версии 3 я даже написал класс - наследник QAction, который выполняет такую работу, будучи добвленым в меню.
Записан
L.Marvell
Гость
« Ответ #4 : Июль 26, 2005, 13:46 »

Цитата: "Телков Сергей"
Можешь использовать следующий подход.

На сигнал aboutToShow() твоего меню вешаешь слот. В этом слоте пробегаешь по всем пунктам меню, касающимся тулбаров и обновляешь их состояние (QPopupMenu::setItemChecked()) используя результат возвращаемый функцией тулбара isVisible() (лучше isVisibleTo( <главное_окно_приложения> ).

Можно меню очищать и заново добавлять в него все пункты меню с их статусами, основываясь на списке тулбаров (dock windows), взятому у главного окна (QMainWindow). Таким образом в меню всегда будет достоверная информация обо всех тулбарах, независимо от того когда они добавились/удалились/скрылись/показались. Если еще и список тулбаров фильтровать с использованием функции QMainWindow::isAppropriate(), то тогда меню будет похоже на контекстное меню.

Не знаю как в Qt 4, но в версиях 2 и 3 такой способ вполне применим. Для версии 3 я даже написал класс - наследник QAction, который выполняет такую работу, будучи добвленым в меню.

Огромное спасибо за мысль! Правда я уже сделал наследник класса Qtoolbar и на hideEvent() повесил setChecked(false). Может и геморно, но работает Улыбающийся
Записан
Телков Сергей
Гость
« Ответ #5 : Июль 26, 2005, 14:56 »

Цитата: "L.Marvell"

Огромное спасибо за мысль! Правда я уже сделал наследник класса Qtoolbar и на hideEvent() повесил setChecked(false). Может и геморно, но работает Улыбающийся


Советую переопределить метод hide(), так как hideEvent() можно без особого ущерба недопустить с помощью eventFilter(). Впрочем если это использовано в рамках одного заранее известного приложения, то и так будет работать. А вот на библиотечный уровень такой подход все же не потянет по выше названой причине и так как нужно обязательно использовать переопределенный тулбар. Но это уже идеализация.
Записан
L.Marvell
Гость
« Ответ #6 : Июль 26, 2005, 15:22 »

Цитата: "Телков Сергей"

Советую переопределить метод hide(), так как hideEvent() можно без особого ущерба недопустить с помощью eventFilter(). Впрочем если это использовано в рамках одного заранее известного приложения, то и так будет работать. А вот на библиотечный уровень такой подход все же не потянет по выше названой причине и так как нужно обязательно использовать переопределенный тулбар. Но это уже идеализация.

Вобщем-то да, это одно заранее известное приложение. Я пока просто учусь. Но за совет спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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