Название: прятание QToolBar Отправлено: L.Marvell от Июля 15, 2005, 11:17 Всем привет!
Проблемка в следующем: есть приложение с тулбаром, а также есть меню с пунктом "показать тулбар", здесь все работает хорошо. Кликаем показать, тулбар появляется и пункт меню отмечен галочкой, убираем галочку, тулбар прячется. Но, тулбар можно спрятать через его контекстное меню и тогда естественно меню не реагирует, и остается в состоянии ON. Никак не могу понять на какой сигнал тулбара вешать собственный слот. Помогите пожалуйста. Название: прятание QToolBar Отправлено: lepsai от Июля 15, 2005, 12:13 void visibilityChanged ( bool visible ) (QDockWindow)
Название: прятание QToolBar Отправлено: L.Marvell от Июля 15, 2005, 12:51 Извините, я не сказал, что пользую Qt4. В принципе данный сигнал присутствует в Q3DockWindow, но хотелось бы знать, как сделать с помощью именно Qt4.
Название: прятание QToolBar Отправлено: Телков Сергей от Июля 26, 2005, 08:33 Можешь использовать следующий подход.
На сигнал aboutToShow() твоего меню вешаешь слот. В этом слоте пробегаешь по всем пунктам меню, касающимся тулбаров и обновляешь их состояние (QPopupMenu::setItemChecked()) используя результат возвращаемый функцией тулбара isVisible() (лучше isVisibleTo( <главное_окно_приложения> ). Можно меню очищать и заново добавлять в него все пункты меню с их статусами, основываясь на списке тулбаров (dock windows), взятому у главного окна (QMainWindow). Таким образом в меню всегда будет достоверная информация обо всех тулбарах, независимо от того когда они добавились/удалились/скрылись/показались. Если еще и список тулбаров фильтровать с использованием функции QMainWindow::isAppropriate(), то тогда меню будет похоже на контекстное меню. Не знаю как в Qt 4, но в версиях 2 и 3 такой способ вполне применим. Для версии 3 я даже написал класс - наследник QAction, который выполняет такую работу, будучи добвленым в меню. Название: прятание QToolBar Отправлено: L.Marvell от Июля 26, 2005, 13:46 Цитата: "Телков Сергей" Можешь использовать следующий подход. На сигнал aboutToShow() твоего меню вешаешь слот. В этом слоте пробегаешь по всем пунктам меню, касающимся тулбаров и обновляешь их состояние (QPopupMenu::setItemChecked()) используя результат возвращаемый функцией тулбара isVisible() (лучше isVisibleTo( <главное_окно_приложения> ). Можно меню очищать и заново добавлять в него все пункты меню с их статусами, основываясь на списке тулбаров (dock windows), взятому у главного окна (QMainWindow). Таким образом в меню всегда будет достоверная информация обо всех тулбарах, независимо от того когда они добавились/удалились/скрылись/показались. Если еще и список тулбаров фильтровать с использованием функции QMainWindow::isAppropriate(), то тогда меню будет похоже на контекстное меню. Не знаю как в Qt 4, но в версиях 2 и 3 такой способ вполне применим. Для версии 3 я даже написал класс - наследник QAction, который выполняет такую работу, будучи добвленым в меню. Огромное спасибо за мысль! Правда я уже сделал наследник класса Qtoolbar и на hideEvent() повесил setChecked(false). Может и геморно, но работает :) Название: прятание QToolBar Отправлено: Телков Сергей от Июля 26, 2005, 14:56 Цитата: "L.Marvell" Огромное спасибо за мысль! Правда я уже сделал наследник класса Qtoolbar и на hideEvent() повесил setChecked(false). Может и геморно, но работает :) Советую переопределить метод hide(), так как hideEvent() можно без особого ущерба недопустить с помощью eventFilter(). Впрочем если это использовано в рамках одного заранее известного приложения, то и так будет работать. А вот на библиотечный уровень такой подход все же не потянет по выше названой причине и так как нужно обязательно использовать переопределенный тулбар. Но это уже идеализация. Название: прятание QToolBar Отправлено: L.Marvell от Июля 26, 2005, 15:22 Цитата: "Телков Сергей" Советую переопределить метод hide(), так как hideEvent() можно без особого ущерба недопустить с помощью eventFilter(). Впрочем если это использовано в рамках одного заранее известного приложения, то и так будет работать. А вот на библиотечный уровень такой подход все же не потянет по выше названой причине и так как нужно обязательно использовать переопределенный тулбар. Но это уже идеализация. Вобщем-то да, это одно заранее известное приложение. Я пока просто учусь. Но за совет спасибо! |