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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTabWidget, кнопка создания вкладки  (Прочитано 5994 раз)
Ground
Гость
« : Июнь 18, 2012, 14:15 »

Доброго времени суток!
У меня есть QTabWidget и нужно для него сделать кнопку добавления вкладки, как в FF. Т.е. небольшая дополнительная вкладка со значком "+". Небольшой нюанс - у меня активно свойство isClosable, т.е. на всех вкладках есть значок крестика.
По хорошему, что нужно сделать - просто поставить в качестве иконки для вкладки PNG-значок с плюсиком. Но у меня появились сложности:
1. Не получается убрать значок крестика совсем. Я делаю следующим образом:
Код
C++ (Qt)
tabBar->tabButton(index, QTabBar::RightSide)->hide();
Если делать подобным образом, кнопка пропадает, но геометрия вкладки не меняется и весь текст и иконки во вкладке центрируются со смещением влево.
Код
C++ (Qt)
tabBar->setTabButton(this->count(), QTabBar::RightSide, btnClose);
В данном случае я устанавливаю вместо стандартной кнопки закрытия - собственную, с размером 0х0. Опять же, получается ерунда.

У меня есть одно решение этой проблемы, но корявое:
Код
C++ (Qt)
QSize TabBar::tabSizeHint(int index) const
{
   if (index == this->count() - 1)
       return modifiedSize;
   else
       return QTabBar::tabSizeHint(index);
}
Принудительно меняем размер вкладки. Но таким образом сможем корректировать только правую границу.

И есть еще одна беда. Если мы ставим иконку на вкладку, то при щелчке на нее не срабатывает переключение вкладок. Т.е. иконка не прозрачна для мышиных событий.

Перерыл кучу форумов, попробовал все советы, но решения именно для своей проблемы найти не смог. И в голову ничего не лезет. Надеюсь на помощь знатоков.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июнь 18, 2012, 14:20 »

А чем не устроил
Код
C++ (Qt)
void QTabWidget::setCornerWidget ( QWidget * widget, Qt::Corner corner = Qt::TopRightCorner )
?
Записан

Qt 5.11/4.8.7 (X11/Win)
Ground
Гость
« Ответ #2 : Июнь 18, 2012, 14:22 »

А чем не устроил
Код
C++ (Qt)
void QTabWidget::setCornerWidget ( QWidget * widget, Qt::Corner corner = Qt::TopRightCorner )
?

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


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