В то время как QLabel
использует QTextDocument
внутренне при рендеринге расширенного текста, он не разрешает доступ к нему в своем API. Однако, поскольку QTextDocument
является QObject
, вы можете попробовать использовать
QTextDocument * tl = label->findChild<QTextDocument>();
для получения доступа к нему (будет работать, если QLabel
создаст QTextDocument
как (прямой или косвенный) дочерний элемент для себя).
Если у вас есть указатель на текстовый документ, вы можете использовать QTextDocument
API, например, QTextOption::setTabsStop()
, чтобы изменить табуляции.
Последний шаг - каким-то образом заставить QLabel
перекрасить себя. Вероятно, достаточно вызова QWidget::update()
, но кеширование (или, что еще хуже, воссоздание текстового документа) может помешать этому. В этом случае вы можете зарегистрировать прослушиватель событий на метке, чтобы настроить текстовый документ непосредственно перед paintEvent()
, но учтите, что sizeHint()
может также измениться при изменении позиции табуляции, поэтому он может быть еще более сложным.
Тем не менее, это то, как я подхожу к проблеме.