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
- 点赞
- 收藏
- 关注作者
评论(0)