Qt入门系列开发教程基础控件篇QTextBrowser文本浏览控件

Posted 鱼酱2333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt入门系列开发教程基础控件篇QTextBrowser文本浏览控件相关的知识,希望对你有一定的参考价值。

详细说明

此类扩展了 QTextEdit(只读模式),添加了一些导航功能,以便用户可以跟踪超文本文档中的链接。
如果您想为您的用户提供可编辑的富文本编辑器,请使用 QTextEdit。如果您想要一个没有超文本导航的文本浏览器,请使用 QTextEdit,并使用 QTextEdit::setReadOnly() 禁用编辑。如果您只需要显示一小段富文本,请使用 QLabel。

文件来源和内容

QTextEdit 的内容是用 sethtml() 或 setPlainText() 设置的,但 QTextBrowser 也实现了 setSource() 函数,使得使用命名文档作为源文本成为可能。在搜索路径列表和当前文档工厂的目录中查找该名称。
如果文档名称以锚点结尾(例如,“#anchor”),则文本浏览器会自动滚动到该位置(使用 scrollToAnchor())。当用户单击一个超链接时,浏览器将调用 setSource() 本身,并将链接的 href 值作为参数。您可以通过连接到 sourceChanged() 信号来跟踪当前源。

导航

QTextBrowser 提供了backward() 和forward() 插槽,您可以使用它们来实现Back 和Forward 按钮。 home() 槽将文本设置为显示的第一个文档。当用户单击锚点时会发出 anchorClicked() 信号。要覆盖浏览器的默认导航行为,请调用 setSource() 函数以在连接到此信号的插槽中提供新的文档文本。
如果要加载存储在 Qt 资源系统中的文档,请使用 qrc 作为 URL 中的方案来加载。例如,对于文档资源路径:/docs/index.html,使用 qrc:/docs/index.html 作为带有 setSource() 的 URL。

API

#ifndef QTEXTBROWSER_H
#define QTEXTBROWSER_H

#include <QtWidgets/qtwidgetsglobal.h>
#include <QtWidgets/qtextedit.h>
#include <QtCore/qurl.h>

QT_REQUIRE_CONFIG(textbrowser);

QT_BEGIN_NAMESPACE

class QTextBrowserPrivate;

class Q_WIDGETS_EXPORT QTextBrowser : public QTextEdit

    Q_OBJECT

    Q_PROPERTY(QUrl source READ source WRITE setSource)
    Q_PROPERTY(QTextDocument::ResourceType sourceType READ sourceType)
    Q_OVERRIDE(bool modified SCRIPTABLE false)
    Q_OVERRIDE(bool readOnly DESIGNABLE false SCRIPTABLE false)
    Q_OVERRIDE(bool undoRedoEnabled DESIGNABLE false SCRIPTABLE false)
    Q_PROPERTY(QStringList searchPaths READ searchPaths WRITE setSearchPaths)
    Q_PROPERTY(bool openExternalLinks READ openExternalLinks WRITE setOpenExternalLinks)
    Q_PROPERTY(bool openLinks READ openLinks WRITE setOpenLinks)

public:
//构造函数
    explicit QTextBrowser(QWidget* parent = nullptr);
    //析构函数
    virtual ~QTextBrowser();
	//获取url
    QUrl source() const;
    //获取文档类型
    QTextDocument::ResourceType sourceType() const;

        //此属性保存文本浏览器用于查找支持内容的搜索路径
    QStringList searchPaths() const;
    void setSearchPaths(const QStringList &paths);
	//当加载文档时以及文档中的每个图像都会调用此函数。 type 表示要加载的资源的类型。 如果无法加载资源,则返回无效的 QVariant。
    virtual QVariant loadResource(int type, const QUrl &name) override;
	//如果文本浏览器可以使用backward() 在文档历史记录中后退,则返回true。
    bool isBackwardAvailable() const;
    bool isForwardAvailable() const;
	//清空历史
    void clearHistory();
    QString historyTitle(int) const;
    QUrl historyUrl(int) const;
    int backwardHistoryCount() const;
    int forwardHistoryCount() const;
	
	//打开外部链接
    bool openExternalLinks() const;
    void setOpenExternalLinks(bool open);

    bool openLinks() const;
    void setOpenLinks(bool open);

public Q_SLOTS:
    void setSource(const QUrl &name, QTextDocument::ResourceType type = QTextDocument::UnknownResource);
    virtual void backward();
    virtual void forward();
    virtual void home();
    virtual void reload();

Q_SIGNALS:
	//当backward() 的可用性发生变化时,会发出此信号。 当用户在家时,available 为 false(); 否则是真的。
    void backwardAvailable(bool);
    //当用户选择但未激活文档中的锚点时发出此信号。 锚点引用的 URL 在链接中传递。
    void forwardAvailable(bool);
//历史变动
    void historyChanged();
    //源变动
    void sourceChanged(const QUrl &);
//高亮
    void highlighted(const QUrl &);
    //A标签点击
    void anchorClicked(const QUrl &);

protected:
   //所有事件
    bool event(QEvent *e) override;
   //按键压下
    virtual void keyPressEvent(QKeyEvent *ev) override;
    //鼠标移动
    virtual void mouseMoveEvent(QMouseEvent *ev) override;
    //鼠标压下
    virtual void mousePressEvent(QMouseEvent *ev) override;
    //鼠标释放
    virtual void mouseReleaseEvent(QMouseEvent *ev) override;
    //焦点失去
    virtual void focusOutEvent(QFocusEvent *ev) override;
    //焦点变化
    virtual bool focusNextPrevChild(bool next) override;
    //绘制
    virtual void paintEvent(QPaintEvent *e) override;
    //尝试以指定类型在给定 url 加载文档。
    virtual void doSetSource(const QUrl &name, QTextDocument::ResourceType type = QTextDocument::UnknownResource);

private:
    Q_DISABLE_COPY(QTextBrowser)
    Q_DECLARE_PRIVATE(QTextBrowser)
    Q_PRIVATE_SLOT(d_func(), void _q_documentModified())
    Q_PRIVATE_SLOT(d_func(), void _q_activateAnchor(const QString &))
    Q_PRIVATE_SLOT(d_func(), void _q_highlightLink(const QString &))
;

QT_END_NAMESPACE

#endif // QTEXTBROWSER_H

以上是关于Qt入门系列开发教程基础控件篇QTextBrowser文本浏览控件的主要内容,如果未能解决你的问题,请参考以下文章

Qt入门系列开发教程基础控件篇框架QFrame

Qt入门系列开发教程基础控件篇小部件(所有控件的基类QWidget)

Qt入门系列开发教程基础控件篇QProgressBar进度条

Qt入门系列开发教程基础控件篇QCalendarWidget日历控件

Qt入门系列开发教程基础控件篇单选按钮QRadioButton

Qt入门系列开发教程基础控件篇QTextBrowser文本浏览控件