Я использовал QTextCharFormat
для форматирования стиля ссылки и вставки в QTextBrowser
, при нажатии на эту ссылку отображается пунктирный контур (я думал, что это стиль фокуса). Как убрать эти точки при нажатии?
Как удалить пунктирную ссылку в QTextBrowser?
Ответы (1)
Вариант А
Если вы вообще не хотите, чтобы QTextBrowser
получал фокус, самое простое однострочное решение — установить его focusPolicy
:
textBrowser->setFocusPolicy(Qt::NoFocus);
Обратите внимание, что это несколько жестокий подход, который полностью исключает навигацию с помощью клавиатуры. В этом отношении установка политики фокуса на Qt::TabFocus
намного приятнее, но это не предотвратит появление прямоугольника фокуса, когда QTextBrowser
имеет фокус.
Вариант Б
Альтернативный подход заключается в использовании пользовательского или, скорее, прокси-стиля для изменения внешнего вида индикатора фокуса.
#include <QProxyStyle>
class MyProxyStyle : public QProxyStyle
{
public:
int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const
{
if (hint == SH_TextControl_FocusIndicatorTextCharFormat)
return false;
return QProxyStyle::styleHint(hint, option, widget, returnData);
}
};
а потом:
textBrowser->setStyle(new MyProxyStyle);
Если вас интересуют детали реализации, чтобы увидеть, как это работает внутри, см. QWidgetTextControl::getPaintContext() и QCommonStyle::styleHint(). Короче говоря, желаемый внешний вид запрашивается из стиля, который может установить желаемый формат текста в возвращаемых данных.