QTabWidget увеличить ширину кнопки со стрелкой прокрутки вкладок

У меня есть QTabWidget со слишком большим количеством вкладок

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

Существует пример таблицы стилей QTabWidget но я не могу заставить его работать хорошо. Таблица стилей ниже создает этот снимок экрана

QTabBar::scroller { /* the width of the scroll buttons */
    width: 40px;
}

QTabBar QToolButton { /* the scroll buttons are tool buttons */
    width: 15px;
    border-width: 2px;
}

где я хотел бы что-то вроде этого скриншота, который я редактировал.


person u23141244    schedule 01.12.2018    source источник
comment
попробуйте с: a->setStyle("fusion"); в вашем main.cpp   -  person eyllanesc    schedule 01.12.2018
comment
Я поместил a.setStyle("fusion"); в main.cpp, и есть небольшое улучшение при использовании таблицы стилей в моем вопросе, кнопка со стрелкой больше, и кнопки больше не накладываются друг на друга, но стрелка влево не отображается, скриншот: imgur.com/v4mdaz6   -  person u23141244    schedule 02.12.2018
comment
Интересно, что когда я использую вашу таблицу стилей в Qt Creator, она отображается прямо во время редактирования формы, а не во время фактического отображения.   -  person CodeLurker    schedule 11.03.2019


Ответы (1)


Метод № 1: это ошибка, простая и понятная. Фон кнопок прозрачный; но установка белого цвета с помощью таблицы стилей и установка ширины также не работают правильно.

Я смог решить проблему с помощью таблицы стилей таким образом:

QTabBar::scroller {width: 0px;}

Если это не работает: избавиться от него. Затем я создал две кнопки для прокрутки вправо и расположил виджет вкладки и кнопки горизонтально. Я установил отступы для вертикальных и горизонтальных макетов на ноль. Я пометил кнопки «‹» и «>», но вы можете сделать это покрасивее, если хотите. Если вы хотите, чтобы область вкладок под полосой прокрутки была такой же ширины, как полоса вкладок и кнопки, вам понадобятся два виджета вкладок:

               QTabWidget1    Button1    Button2

                         Wider QTabwidget2

Затем вы устанавливаете высоту QTabWidget1, чтобы отображались только вкладки, и устанавливаете высоту панели вкладок QTabWidget2 на 0 с помощью таблицы стилей:

QTabBar::tab {height: 0px;}

поэтому отображаются только тела вкладок; а не сами вкладки.

Поскольку они недостаточно продуманы, чтобы предоставить метод прокрутки для панели вкладок, вы можете обмануть его, просто изменив активную вкладку с помощью setCurrentIndex(); и останется на виду.

Затем вы можете активировать или деактивировать кнопки ‹ и > в зависимости от того, активна ли уже первая или последняя вкладка. Я не утруждаюсь их скрывать или отключать, так как мое приложение в основном расчетное и мало полируется.

Да, это ПИТА. Если нет лучшего способа обойти это, просто закодируйте его. Если жизнь преподнесет тебе лимон, сделай лимонные бомбочки и покажи ей, кто в доме хозяин. (На самом деле, почти всегда фигурально, только.) Я отправлю отчет об ошибке на днях, когда у меня будет время.

Может быть, есть волшебные свойства, которые могут заставить эти кнопки иметь нормальный фон и размеры; но я их не знаю.

Редактировать: Метод № 2: Решил мою проблему, но не будет OP (для тех, кто испытывает ту же проблему. Я пришел сюда из-за этой проблемы, когда я не пытался изменить стиль этих кнопок. Это известная ошибка при использовании таблицы стилей что QTabBar либо имеет, либо наследует: "При добавлении таблицы стилей на вкладки кнопки со стрелками навигации стать прозрачным". (Проголосуйте за эту проблему, и она будет исправлена ​​быстрее.) Простое отсутствие таблицы стилей решило мою проблему. Моя была в родительской форме, и я удалил ее и применил к нужному элементу только стиль, исправил.

Метод № 3: Вы можете попробовать установить такие свойства, как ширина кнопки, используя свойства, не относящиеся к таблицам стилей, пока это не будет исправлено; хотя я считаю, что это будет означать подкласс QTabWidget и QTabBar для доступа к свойствам QToolButton. Звучит хуже, чем есть. Вы можете сделать это, написав в заголовке около дюжины строк кода; хотя, если вы используете Qt Creator на вкладке «Дизайн» или «Дизайнер», вам нужно будет продвигать виджет вкладки.

person CodeLurker    schedule 11.03.2019