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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTabWidget и закрытие таба по щелчку.  (Прочитано 8364 раз)
Я.К.
Гость
« : Ноябрь 27, 2008, 08:24 »

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

Хороший вопрос.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Ноябрь 27, 2008, 11:01 »

1. Переопределить QTabBar, добавив нужный функционал, и назначить новый класс для QTabWidget.
2. Убить виджет, связанный с табом, при закрытии - все его потомки будут автоматом убиты (если не забыт parent в конструкторе при создании).
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Я.К.
Гость
« Ответ #3 : Ноябрь 27, 2008, 20:20 »

А как сделать, чтобы при закрытии какого-то виджета он удалялся? А то обычно он просто прячется.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Ноябрь 27, 2008, 20:32 »

А как сделать, чтобы при закрытии какого-то виджета он удалялся? А то обычно он просто прячется.

см. Qt::WA_DeleteOnClose
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Я.К.
Гость
« Ответ #5 : Ноябрь 27, 2008, 20:56 »

Премного благодарит.
ЗЫ: а вроде был какой-то атрибут, что-то типа closable, что на QTabBar'ах появлялись кнопки закрытия - кто-то что-нибудь про это слыхал?
Записан
ритт
Гость
« Ответ #6 : Ноябрь 27, 2008, 21:05 »

Qt4.5
Записан
Ryhel
Гость
« Ответ #7 : Ноябрь 29, 2008, 12:31 »

А зачем так сложно? Достаточно установить eventFilter на стандартный QTabBar и можно обрабатывать любые события
« Последнее редактирование: Ноябрь 29, 2008, 12:33 от Ryhel » Записан
Я.К.
Гость
« Ответ #8 : Декабрь 01, 2008, 19:59 »

А зачем так сложно? Достаточно установить eventFilter на стандартный QTabBar и можно обрабатывать любые события

Так ведь QTabBar Сам по себе ни получить, ни вставить не дают? Можешь какой-нибудь простой пример показать - как закрыть таб одним щелчком?
Записан
ритт
Гость
« Ответ #9 : Декабрь 02, 2008, 00:03 »

если задача ограничена закрытием по клику, читай доки:
Цитировать
QTabBar * QTabWidget::tabBar () const   [protected]
void QTabWidget::setTabBar ( QTabBar * tb )   [protected]
Записан
Ryhel
Гость
« Ответ #10 : Декабрь 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(). Ну а уже по индексу можно выполнять над табом нужные действия.
Записан
Я.К.
Гость
« Ответ #11 : Декабрь 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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