Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Я.К. от Ноябрь 27, 2008, 08:24



Название: QTabWidget и закрытие таба по щелчку.
Отправлено: Я.К. от Ноябрь 27, 2008, 08:24
Есть QTabWidget. В ём есть табы. В табах этих есть виджеты.
а) как сделать, чтобы эти табы в QTabWidget'е можно было закрывать, например, по щелчку на QTabBar'ы средней кнопкой мыши? Или сделать так, чтобы на этих QTabBar'ах была этакая кнопочка закрытия. А лучше и то и другое сразу.
б) Кстати, как сделать так, чтобы при закрытии таба на него и все его виджеты-потомки вызывался delete?


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: Spicos от Ноябрь 27, 2008, 09:50
Хороший вопрос.


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: Racheengel от Ноябрь 27, 2008, 11:01
1. Переопределить QTabBar, добавив нужный функционал, и назначить новый класс для QTabWidget.
2. Убить виджет, связанный с табом, при закрытии - все его потомки будут автоматом убиты (если не забыт parent в конструкторе при создании).


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: Я.К. от Ноябрь 27, 2008, 20:20
А как сделать, чтобы при закрытии какого-то виджета он удалялся? А то обычно он просто прячется.


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: pastor от Ноябрь 27, 2008, 20:32
А как сделать, чтобы при закрытии какого-то виджета он удалялся? А то обычно он просто прячется.

см. Qt::WA_DeleteOnClose


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: Я.К. от Ноябрь 27, 2008, 20:56
Премного благодарит.
ЗЫ: а вроде был какой-то атрибут, что-то типа closable, что на QTabBar'ах появлялись кнопки закрытия - кто-то что-нибудь про это слыхал?


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: ритт от Ноябрь 27, 2008, 21:05
Qt4.5


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: Ryhel от Ноябрь 29, 2008, 12:31
А зачем так сложно? Достаточно установить eventFilter на стандартный QTabBar и можно обрабатывать любые события


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: Я.К. от Декабрь 01, 2008, 19:59
А зачем так сложно? Достаточно установить eventFilter на стандартный QTabBar и можно обрабатывать любые события

Так ведь QTabBar Сам по себе ни получить, ни вставить не дают? Можешь какой-нибудь простой пример показать - как закрыть таб одним щелчком?


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: ритт от Декабрь 02, 2008, 00:03
если задача ограничена закрытием по клику, читай доки:
Цитировать
QTabBar * QTabWidget::tabBar () const   [protected]
void QTabWidget::setTabBar ( QTabBar * tb )   [protected]


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: Ryhel от Декабрь 02, 2008, 01:47
Так ведь QTabBar Сам по себе ни получить, ни вставить не дают? Можешь какой-нибудь простой пример показать - как закрыть таб одним щелчком?
Ну как уже было упомянуто таббар можно получить с помощью QTabWidget::tabBar(), правда для этого надо субкласситься от QTabWidget. Далее из QTabWidget можно сказать tabBar()->installEventFilter(this). В перегруженном QTabWidget::eventFilter() после проверок if(o == tabBar()) и if(e-> == QEvent::MouseButtonRelease) можно получить позицию мыши через QMouseEvent::pos(), затем по ней индекс таба с помощью QTabBar()::tabAt(). Ну а уже по индексу можно выполнять над табом нужные действия.


Название: Re: QTabWidget и закрытие таба по щелчку.
Отправлено: Я.К. от Декабрь 07, 2008, 12:06
Таки оно было тут.
http://www.qtcentre.org/forum/f-qt-programming-2/t-qtabwidget-how-to-close-a-tab-by-a-click-17334.html