Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Ground от Июнь 18, 2012, 14:15



Название: QTabWidget, кнопка создания вкладки
Отправлено: 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);
}
Принудительно меняем размер вкладки. Но таким образом сможем корректировать только правую границу.

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

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


Название: Re: QTabWidget, кнопка создания вкладки
Отправлено: GreatSnake от Июнь 18, 2012, 14:20
А чем не устроил
Код
C++ (Qt)
void QTabWidget::setCornerWidget ( QWidget * widget, Qt::Corner corner = Qt::TopRightCorner )
?


Название: Re: QTabWidget, кнопка создания вкладки
Отправлено: Ground от Июнь 18, 2012, 14:22
А чем не устроил
Код
C++ (Qt)
void QTabWidget::setCornerWidget ( QWidget * widget, Qt::Corner corner = Qt::TopRightCorner )
?

Забыл про него упомянуть в посте. Ну он рисует кнопку в правом верхнем углу таб-бара, а мне нужно ее расположить сразу после последней вкладки.