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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как вставить разделитель в закладки QTabBar (решено)?  (Прочитано 3307 раз)
Hordi
Гость
« : Ноябрь 11, 2010, 14:21 »

Хочется сделать группы закладок в QTabBar. Пока не могу придумать как отделить их между собой... В голову приходит создать закладку-пустышку, переопределить ::paint и не перерисовывать ее...

Какие еще идеи?

Qt 4.7
« Последнее редактирование: Ноябрь 11, 2010, 16:11 от Hordi » Записан
NicK
Гость
« Ответ #1 : Ноябрь 11, 2010, 14:29 »

может, проще раскрашивать табы разным цветом?
Записан
Hordi
Гость
« Ответ #2 : Ноябрь 11, 2010, 14:43 »

Да можно конечно, но Спека есть Грустный
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Ноябрь 11, 2010, 14:54 »

Поместите несколько QTabBar-ов на лейаут.
Записан

Qt 5.11/4.8.7 (X11/Win)
Hordi
Гость
« Ответ #4 : Ноябрь 11, 2010, 14:58 »

Поместите несколько QTabBar-ов на лейаут.

Проблемка в том, что будет 2 QTabBar, а у каждого из них будет текущий активный Tab...
Записан
Hordi
Гость
« Ответ #5 : Ноябрь 11, 2010, 15:33 »

Сделал через костыль...

Создаем в середине вкладку без текста, дисейблим ее (чтобы не получала фокус, клавиши и т.п.), запоминаем ее индекс. Далее переопределяем функцию paintEvent, и делаем так (т.е. тупо перерисовываем ее с цветами фона):


Код:
void TabBar::paintEvent(QPaintEvent* e)
{
  QTabBar::paintEvent(e);

  if(-1==_spaceIndex)
  {
    return;
  }

  QStylePainter painter(this);
 
  QStyleOptionTabV3 option;
  initStyleOption(&option, _spaceIndex);
 
  QBrush b = palette().brush(QPalette::Window);

  QPalette& pl = option.palette;

  QPalette::ColorGroup cg[3] = { QPalette::Disabled, QPalette::Active, QPalette::Inactive };
  for(uint i=0;i<3;++i)
  {
    pl.setBrush(cg[i], QPalette::Window, b);
    pl.setBrush(cg[i], QPalette::Light, b);
    pl.setBrush(cg[i], QPalette::Midlight, b);
    pl.setBrush(cg[i], QPalette::Dark, b);
    pl.setBrush(cg[i], QPalette::Mid, b);
    pl.setBrush(cg[i], QPalette::Shadow, b);
  }

  painter.drawControl(QStyle::CE_TabBarTab, option);
}
« Последнее редактирование: Ноябрь 11, 2010, 16:08 от Hordi » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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