Скрыть текст метки для вкладок Qt, не устанавливая текст в пустую строку

мне нужно QTabWidget только с иконками:

Как я могу скрыть текст метки вкладки в Qt? Я не могу установить текст в пустую строку (""), так как я использую прикрепленные виджеты ( QDockWidget ) и текст метки устанавливается автоматически (и он мне нужен, если виджет плавающий).

Но в режиме вкладок я просто хочу отображать значки (вкладок).
Возможные подходы:

  1. Размер шрифта до 0?
  2. Мне нужно создать свой собственный класс бара и переопределить событие рисования как Вот

Что-нибудь проще / чище?

— Редактировать —

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

Еще немного места занято

В настоящее время я пытаюсь найти что-то среднее между «пустым текстом» и подходом Прасада Сильвы. Я пытаюсь определить текстовую метку внутри вкладки и установить ее размер на 0, а затем сбросить ее. Это немного отличается, но сохранит текст без изменений.

Кстати, я вижу строку поверх моих вкладок, есть идеи, что это такое (откуда это)?
Редактировать: кажется, что для этого не существует «простого способа» (таблица стилей, атрибут), см. Скрытие нижней строки в QTabBar

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

4

Решение

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

Я не думаю, что в API есть что-то для этого не очень распространенного случая, что означает, что вам нужно будет сделать это самостоятельно.

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

1

Другие решения

Это не может быть сделано легко. Используйте пустой текст.

3

Я решил что-то вроде создания подкласса QDockWidget, который установил подкласс QWidget в качестве заголовка (через setTitleBarWidget). Это дало мне возможность управлять отображением / скрытием текста в строке заголовка, когда виджет-док запускает topLevelChanged, dockLocationChanged и visiblityChanged.

Это действительно большой хак, чтобы обойти тот факт, что Qt отказался предоставить публичный API для системы стыковки. С тех пор мы перешли к индивидуальной реализации стыковки из-за этих ограничений.

3
По вопросам рекламы [email protected]