【发布时间】:2016-10-31 02:49:30
【问题描述】:
我用QTextCharFormat格式化链接样式并插入QTextBrowser,当点击这个链接时,它显示虚线轮廓(我认为这是它的焦点样式)。点击后如何去除这些点?
【问题讨论】:
标签: qt qtextbrowser
我用QTextCharFormat格式化链接样式并插入QTextBrowser,当点击这个链接时,它显示虚线轮廓(我认为这是它的焦点样式)。点击后如何去除这些点?
【问题讨论】:
标签: qt qtextbrowser
选项 A
如果您根本不希望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()。简单来说就是从样式中查询到想要的外观,可以在返回数据中设置想要的文本格式。
【讨论】: