2016-10-31 3 views

ответ

0

Вариант А

Если вы не хотите, чтобы QTextBrowser, чтобы получить фокус на всех, наиболее простое решение один вкладыш, чтобы установить его focusPolicy:

textBrowser->setFocusPolicy(Qt::NoFocus); 

Обратите внимание, что это несколько жестокий подход, и вообще предотвращает клавиатурную навигацию. В этом отношении настройка политики фокуса на Qt::TabFocus намного приятнее, но она не будет препятствовать появлению прямоугольника фокуса, когда QTextBrowser действительно имеет фокус.

Вариант B

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

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

Смежные вопросы