Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Hordi от Ноябрь 11, 2010, 14:21



Название: Как вставить разделитель в закладки QTabBar (решено)?
Отправлено: Hordi от Ноябрь 11, 2010, 14:21
Хочется сделать группы закладок в QTabBar. Пока не могу придумать как отделить их между собой... В голову приходит создать закладку-пустышку, переопределить ::paint и не перерисовывать ее...

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

Qt 4.7


Название: Re: Как вставить разделитель в закладки QTabBar?
Отправлено: NicK от Ноябрь 11, 2010, 14:29
может, проще раскрашивать табы разным цветом?


Название: Re: Как вставить разделитель в закладки QTabBar?
Отправлено: Hordi от Ноябрь 11, 2010, 14:43
Да можно конечно, но Спека есть :(


Название: Re: Как вставить разделитель в закладки QTabBar?
Отправлено: GreatSnake от Ноябрь 11, 2010, 14:54
Поместите несколько QTabBar-ов на лейаут.


Название: Re: Как вставить разделитель в закладки QTabBar?
Отправлено: Hordi от Ноябрь 11, 2010, 14:58
Поместите несколько QTabBar-ов на лейаут.

Проблемка в том, что будет 2 QTabBar, а у каждого из них будет текущий активный Tab...


Название: Re: Как вставить разделитель в закладки QTabBar?
Отправлено: Hordi от Ноябрь 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);
}