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

网友投稿 2945 2022-05-29

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 #include #include 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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:沃通电子签章系统
下一篇:《Word/Excel/PPT 2019完全自学教程 : 视频讲解版 》 —1.1.2 工作界面说明
相关文章