IDocument类
class Core::IDocumentIDocument类描述了一种可保存和重新加载的文档。更多...
头文件 | #include <coreplugin/idocument.h> |
继承 | QObject |
继承者 |
公共类型
枚举 | ChangeTrigger { TriggerInternal, TriggerExternal } |
枚举 | ChangeType { TypeContents, TypeRemoved } |
枚举类 | OpenResult { Success, ReadError, CannotHandle } |
枚举 | ReloadFlag { FlagReload, FlagIgnore } |
公共函数
IDocument(QObject *parent = nullptr) | |
virtual | ~IDocument() override |
void | checkPermissions() |
virtual QByteArray | contents() const |
QString | displayName() const |
virtual QString | fallbackSaveAsFileName() const |
virtual Utils::FilePath | fallbackSaveAsPath() const |
const Utils::FilePath & | filePath() const |
virtual void | formatContents() |
Utils::Id | id() const |
Utils::InfoBar * | infoBar() |
bool | isFileReadOnly() const |
virtual bool | isModified() const |
virtual bool | isSaveAsAllowed() const |
bool | isSuspendAllowed() const |
bool | isTemporary() const |
QString | mimeType() const |
virtual Core::IDocument::OpenResult | open(QString *errorString, const Utils::FilePath &filePath, const Utils::FilePath &realFilePath) |
QString | preferredDisplayName() const |
virtual bool | reload(QString *errorString, Core::IDocument::ReloadFlag flag, Core::IDocument::ChangeType type) |
virtual Core::IDocument::ReloadBehavior | reloadBehavior(Core::IDocument::ChangeTrigger trigger, Core::IDocument::ChangeType type) const |
bool | save(QString *errorString, const Utils::FilePath &filePath = Utils::FilePath(), bool autoSave = false) |
virtual bool | setContents(const QByteArray &contents) |
virtual void | setFilePath(const Utils::FilePath &filePath) |
void | setId(Utils::Id id) |
void | setMimeType(const QString &mimeType) |
void | setPreferredDisplayName(const QString &name) |
void | setSuspendAllowed(bool value) |
void | setTemporary(bool temporary) |
virtual bool | shouldAutoSave() const |
信号
void | aboutToReload() |
void | aboutToSave(const Utils::FilePath &filePath, bool autoSave) |
void | changed() |
void | contentsChanged() |
void | filePathChanged(const Utils::FilePath &oldName, const Utils::FilePath &newName) |
void | mimeTypeChanged() |
void | reloadFinished(bool success) |
void | saved(const Utils::FilePath &filePath, bool autoSave) |
受保护的函数
virtual bool | saveImpl(QString *errorString, const Utils::FilePath &filePath = Utils::FilePath(), bool autoSave = false) |
详细描述
该类有两个用例。
处理外部修改
您可以实现 IDocument 并在 DocumentManager 中注册实例,以便让它处理文件的外部修改。当使用 filePath() 指定的文件在外部已发生变化时,DocumentManager 通过 reloadBehavior() 询问相应的 IDocument 实例应该怎么做。如果它返回 IDocument::BehaviorAsk
,则会询问用户是否应该从磁盘重新加载文件。如果用户请求重新加载或 reloadBehavior() 返回 IDocument::BehaviorSilent
,则 DocumentManager 调用 reload() 从磁盘开始重新加载文件。
核心函数: setFilePath()、reload()、reloadBehavior()。
如果文档的内容可以在 Qt Creator 中更改,与磁盘上的内容分叉: isModified()、save()、isSaveAsAllowed()、fallbackSaveAsPath()、fallbackSaveAsFileName()。
编辑文档
实现 IDocument 子类最常见的用例是作为一个 IEditor 实现的文档。多个编辑器实例可以同时处理同一文档实例,例如,如果文档同时在多个分割视图中可见。因此,IDocument 子类应该包含所有与特定 IEditor 实例无关的数据,例如内容和突出显示信息。
每个 IDocument 子类只需要与其设计来一起工作的相应 IEditor 子类一起工作。
IDocument 可以由文件支持,或者仅表示内存中的某些数据。由文件支持的文档会被 EditorManager 自动添加到 DocumentManager。
核心函数: setId()、isModified()、contents()、setContents()。
如果文档的内容由文件支持: open()、save()、setFilePath()、mimeType()、shouldAutoSave()、setSuspendAllowed() 以及来自 Handling External Modifications 的所有内容。
如果该文档的内容没有文件支持: setPreferredDisplayName(),setTemporary()。
成员类型文档
枚举 IDocument::ChangeTrigger
ChangeTrigger 枚举描述了文件是内部还是外部更改的。
常量 | 值 | 描述 |
---|---|---|
Core::IDocument::TriggerInternal | 0 | 文件被 Qt Creator 更改。 |
Core::IDocument::TriggerExternal | 1 | 文件从外部更改。 |
另请参阅IDocument::reloadBehavior。
枚举 IDocument::ChangeType
ChangeType 枚举描述文件更改的方式。
常量 | 值 | 描述 |
---|---|---|
Core::IDocument::TypeContents | 0 | 文件的主体内容已更改。 |
Core::IDocument::TypeRemoved | 1 | 文件已被移除。 |
另请参阅IDocument::reloadBehavior() 和 IDocument::reload。
枚举类 IDocument::OpenResult
OpenResult 枚举描述了文件是否成功打开。
常量 | 值 | 描述 |
---|---|---|
Core::IDocument::OpenResult::Success | 0 | 文件已成功读取,并且可以被该文档类型处理。 |
Core::IDocument::OpenResult::ReadError | 1 | 由于文件不存在或权限不足导致无法打开文件进行读取。 |
Core::IDocument::OpenResult::CannotHandle | 2 | 该文档类型无法处理文件内容。 |
枚举 IDocument::ReloadFlag
ReloadFlag 枚举描述了是否应从磁盘重新加载文件。
常量 | 值 | 描述 |
---|---|---|
Core::IDocument::FlagReload | 0 | 应重新加载该文件。 |
Core::IDocument::FlagIgnore | 1 | 不应重新加载文件,但文档状态应反映更改。 |
另请参阅IDocument::reload。
成员函数文档
IDocument::IDocument(QObject *parent = nullptr)
带有 parent 创建 IDocument。
注意:将文档的所有权用于 parent,如果 IDocument 使用于 IEditor,则通常是一个坏主意。在这种情况下,更好的选择是使用共享所有权。
[重写虚函数 noexcept]
IDocument::~IDocument()
销毁 IDocument。如果该文档存在自动保存文件,则将其删除。
另请参阅shouldAutoSave。
[信号]
`void` IDocument::aboutToReload()
在从支持文件重新加载文档之前发出此信号。
另请参阅reload。
[信号]
`void` IDocument::aboutToSave(const `Utils::FilePath` &filePath, `bool` autoSave)
在将文档保存到 filePath 之前发出此信号。
autoSave 表示此保存是否由自动保存计时器触发的。
另请参阅save。
[信号]
void IDocument::changed()
当文档的元数据,如文件名或修改状态发生变化时,会发出此信号。
另请参阅isModified(),filePath() 和 displayName()。
void IDocument::checkPermissions()
更新关于底层文件的只读状态下缓存的信息。
[虚函数]
QByteArray IDocument::contents() const
返回文档的当前内容。默认实现返回一个空的QByteArray。
另请参阅setContents() 和 contentsChanged()。
[信号]
void IDocument::contentsChanged()
当文档的内容发生变化时,会发出此信号。
另请参阅contents()。
QString IDocument::displayName() const
返回用于显示此文档的字符串,例如在“打开文档”视图和文档下拉菜单中。
显示名称可以是以下之一,按顺序
- 由文档模型设置的唯一显示名称
- 由所有者设置的首选显示名称
- 文档文件名的基本名称
另请参阅setPreferredDisplayName(),filePath() 和 changed()。
[虚函数]
QString IDocument::fallbackSaveAsFileName() const
返回一个文件名,用于在文档没有底层文件时使用“另存为”文件对话框。
另请参阅fallbackSaveAsPath()。
[虚函数]
Utils::FilePath IDocument::fallbackSaveAsPath() const
返回一个路径,用于在文档没有底层文件时使用“另存为”文件对话框。
另请参阅fallbackSaveAsFileName()。
const Utils::FilePath &IDocument::filePath() const
返回此文档所引用文件的绝对路径。对于没有底层文件的文档,可能为空。
另请参阅setFilePath()。
[信号]
void IDocument::filePathChanged(const Utils::FilePath &oldName, const Utils::FilePath &newName)
当文件路径从oldName更改为newName后,将发出此信号。
另请参阅filePath()。
[虚函数]
void IDocument::formatContents()
如果实现支持此类功能,则格式化文档的内容。
Utils::Id IDocument::id() const
返回该文档类型的ID。
另请参阅setId。
Utils::InfoBar *IDocument::infoBar()
返回文档的Utils::InfoBar,它显示在编辑器顶部。
bool IDocument::isFileReadOnly() const
返回此文档的底层文件是否为只读,或者是如果文档没有底层文件,则返回false
。
[虚拟]
bool IDocument::isModified() const
返回文档在从文件加载后是否已被修改。
默认实现返回false
。重新实现时应在此属性更改时发出changed。
另请参阅changed。
[虚拟]
bool IDocument::isSaveAsAllowed() const
返回是否允许将文档保存为不同的文件名。
默认实现返回false
。
另请参阅save。
bool IDocument::isSuspendAllowed() const
返回是否允许挂起文档。
编辑器可以自动挂起编辑器和对应的文档,如果该文档由文件支持,没有被修改,且不是临时的。挂起的IEditor和IDocument实例将被删除并从内存中移除,但仍然在Qt Creator中可视,就像文档仍然打开一样。
默认为false
。
另请参阅setSuspendAllowed、isModified和isTemporary。
bool IDocument::isTemporary() const
返回文档是否是临时的,例如在保存或恢复会话状态时不应考虑,也不应添加到“最近打开的文件”列表中。
默认为false
。
另请参阅setTemporary。
QString IDocument::mimeType() const
返回文档内容的MIME类型(如果适用)。
子类应在设置或加载内容后使用setMimeType设置此属性。
默认MIME类型为空。
另请参阅setMimeType和mimeTypeChanged。
[信号]
void IDocument::mimeTypeChanged()
当文档内容的MIME类型更改时发出此信号。
另请参阅mimeType。
[虚拟]
Core::IDocument::OpenResult IDocument::open(QString *errorString, const Utils::FilePath &filePath, const Utils::FilePath &realFilePath)
open()方法用于在编辑器中打开文档时加载文件的全部内容。
如果文档是从自动保存文件中打开的,realFilePath 是要加载的自动保存文件的名称,而 filePath 则是结果文件的文件名。在这种情况下,应加载自动保存文件的内容,IDocument 的文件名应设置为 filePath,并且文档状态应为已修改。
如果编辑器是从常规文件中打开的,filePath 和 filePath 是相同的。
使用 errorString 在文档无法处理文件内容时返回错误消息。
返回文件是否成功打开并读取。
默认实现不执行任何操作,并返回 CannotHandle。
另请参阅EditorManager::openEditor(),shouldAutoSave() 和 setFilePath()。
QString IDocument::preferredDisplayName() const
返回此文档的首选显示名称。
默认的首选显示名称为空,这意味着首选的显示名称是该文档所依赖文件的文件名。
另请参阅setPreferredDisplayName() 和 displayName()。
[虚拟]
bool IDocument::reload(QString *errorString, Core::IDocument::ReloadFlag flag, Core::IDocument::ChangeType type)
当磁盘上的支撑文件发生变化时,从支撑文件重新加载文档。
如果 flag 是 FlagIgnore,文件实际上不应被加载,但文档应反映在它的 modified state 中的更改。
type 指定文件权限是否发生变化,或者文件内容是否已更改。
使用 errorString 在文档无法处理文件内容时返回错误消息。
返回文件是否成功重新加载。
默认实现不执行任何操作,并返回 true
。
子类应在重新加载文件之前发出 aboutToReloadreloadFinished()。
另请参阅isModified(),aboutToReload(),reloadFinished() 和 changed()。
[虚拟]
Core::IDocument::ReloadBehavior IDocument::reloadBehavior(Core::IDocument::ChangeTrigger trigger, Core::IDocument::ChangeType type) const
DocumentManager 使用 DocumentManager方法 reloadBehavior() 询问,当支撑此文档的文件在磁盘上发生变化时应该做什么。
trigger 指定更改是否由 Qt Creator 中的某些操作触发。 type 指定文件权限是否发生变化,内容是否已更改,或者文件是否完全删除。
返回是否应询问用户或静默重新加载文档。
默认实现如果仅权限更改或内容已更改但触发器是内部的且文档未修改时,将请求静默重新加载。
另请参阅 isModified()。
[信号]
void IDocument::reloadFinished(bool success)
该信号在文档从备用文件重新加载后发出,或如果重新加载失败。
成功状态通过 success 传递。
另请参阅reload。
bool IDocument::save(QString *errorString, const Utils::FilePath &filePath = Utils::FilePath(), bool autoSave = false)
将文档内容保存到磁盘上的 filePath。如果 filePath 为空,则使用 filePath()。
如果 autoSave 为 true
,则保存为自动保存,因此文档应避免进行清洁或其他仅为用户请求的保存所执行的操作。
使用 errorString 在保存失败时返回错误消息。
返回保存是否成功。
如果保存成功,则会发出 saved 信号。
另请参阅 shouldAutoSave()、aboutToSave()、saved() 和 filePath()。
[虚拟受保护]
bool IDocument::saveImpl(QString *errorString, const Utils::FilePath &filePath = Utils::FilePath(), bool autoSave = false)
该方法的实现是将文档内容保存到磁盘上的 filePath。
如果 autoSave 为 true
,则保存为自动保存,因此文档应避免进行清洁或其他仅为用户请求的保存所执行的操作。
使用 errorString 在保存失败时返回错误消息。
返回保存是否成功。
默认实现不执行任何操作并返回 false
。
[信号]
void IDocument::saved(const Utils::FilePath &filePath, bool autoSave)
在文档保存到 filePath 之后发出该信号。
autoSave 表示此保存是否由自动保存计时器触发的。
另请参阅save。
[虚拟]
bool IDocument::setContents(const QByteArray &contents)
setContents() 方法用于例如 EditorManager::openEditorWithContents() 来设置此文档的 contents。
返回设置内容是否成功。
默认实现不执行任何操作并返回 false。
另请参阅 contents() 和 EditorManager::openEditorWithContents()。
[虚拟]
void IDocument::setFilePath(const Utils::FilePath &filePath)
设置支持此文档的文件的绝对 filePath。默认实现设置文件名并发出 filePathChanged() 和 changed() 信号。
另请参阅 filePath()、filePathChanged() 和 changed()。
void IDocument::setId(Utils::Id id)
为该文档类型设置ID为id。这与相应的IEditor实现以及IEditorFactory的id()相关联。如果IDocument实现仅与单个IEditor类型配合使用,这最好在IDocuments的构造函数中设置。
另请参阅id。
void IDocument::setMimeType(const QString &mimeType)
将文档内容设置MIME类型为mimeType。
另请参阅mimeType。
void IDocument::setPreferredDisplayName(const QString &name)
为此文档设置首选显示名称name。
另请参阅preferredDisplayName()和displayName。
void IDocument::setSuspendAllowed(bool value)
设置文档是否可以暂停到value。
另请参阅isSuspendAllowed。
void IDocument::setTemporary(bool temporary)
设置文档是否为临时。
另请参阅isTemporary。
[虚拟]
bool IDocument::shouldAutoSave() const
返回文档是否应在用户定义的时间间隔自动保存。
默认实现返回false
。
©2024 The Qt Company Ltd. 此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布并由其发布的GNU自由文档许可版1.3的条款授予的。Qt及其相关标志是芬兰的Qt Company Ltd以及/或全球其他国家的商标。所有其他商标均为各自所有者的财产。