Как удалить пунктирную ссылку в QTextBrowser?

Я использовал QTextCharFormat для форматирования стиля ссылки и вставки в QTextBrowser, при нажатии на эту ссылку отображается пунктирный контур (я думал, что это стиль фокуса). Как убрать эти точки при нажатии?


person Kha Tran    schedule 31.10.2016    source источник


Ответы (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(). Короче говоря, желаемый внешний вид запрашивается из стиля, который может установить желаемый формат текста в возвращаемых данных.

person jpnurmi    schedule 01.11.2016