Yayin Story Studio logo Yayin Story Studio 项目文档
回到主页 用户手册

Visindigo::General::VIApplication Class

class Visindigo::General::VIApplication

Visindigo应用程序的根基,使用部分Visindigo功能必须首先初始化此类. 详情...

头文件: #include <General/VIApplication.h>
自以下版本: Visindigo 0.13.0

公开类型

(自 Visindigo 0.13.0 引入) enum AppType { CoreApp, GuiApp, WidgetApp }
(自 Visindigo 0.13.0 引入) enum EnvKey { LogFolderPath, LogFileNameTimeFormat, LogTimeFormat, PluginFolderPath, ConfigPath, …, DefaultColorTheme }

公开成员函数

(自 Visindigo 0.13.0 引入) VIApplication(int &argc, char **argv, Visindigo::General::VIApplication::AppType appType = WidgetApp, bool changeWorkingDirToExeDir = true)
(自 Visindigo 0.13.0 引入) ~VIApplication()
(自 Visindigo 0.13.0 引入) void addDependencyPlugin(Visindigo::General::Plugin *plugin)
(自 Visindigo 0.13.0 引入) bool applicationStarted() const
(自 Visindigo 0.13.0 引入) QList<Visindigo::General::Plugin *> getDependencyPlugins() const
(自 Visindigo 0.13.0 引入) Visindigo::General::Plugin *getMainPlugin() const
(自 Visindigo 0.13.0 引入) Visindigo::Widgets::Terminal *getVirtualTerminal() const
(自 Visindigo 0.13.0 引入) void onException(const Visindigo::General::Exception &ex)
(自 Visindigo 0.13.0 引入) void setExceptionMessageHandler(Visindigo::General::ApplicationExceptionMessageHandler *handler)
(自 Visindigo 0.13.0 引入) void setGlobalFont(const QString &fontPath, int fontID = 0)
(自 Visindigo 0.13.0 引入) void setLoadingMessageHandler(Visindigo::General::ApplicationLoadingMessageHandler *handler)
(自 Visindigo 0.13.0 引入) void setMainPlugin(Visindigo::General::Plugin *plugin)
(自 Visindigo 0.13.0 引入) int start()

静态公开成员

(自 Visindigo 0.13.0 引入) QVariant getEnvConfig(Visindigo::General::VIApplication::EnvKey key)
(自 Visindigo 0.13.0 引入) Visindigo::General::VIApplication *getInstance()
(自 Visindigo 0.15.0 引入) bool isWindows11()
(自 Visindigo 0.15.0 引入) bool isWindows()
(自 Visindigo 0.13.0 引入) void setEnvConfig(Visindigo::General::VIApplication::EnvKey key, const QVariant &value)

详细说明

VIApplication类是Visindigo应用程序的基类,负责初始化和管理Visindigo的核心功能模块,如插件管理器和翻译管理器。

在使用Visindigo的任何功能之前,必须首先创建VIApplication的实例,并在start之前正确设置有效的MainPlugin。 如果MainPlugin无效,则应用程序将无法启动。 VIApplication类提供了多种应用程序类型的支持,包括控制台应用程序、GUI应用程序和Widget应用程序,分别 等同于Qt中的QCoreApplicationQGuiApplicationQApplication

此外,VIApplication还提供了环境配置管理功能,允许用户自定义应用程序的日志文件路径、插件文件路径等参数。 但要注意的是,环境配置必须在创建VIApplication实例之前设置,否则可能无法生效。

通常来说,一个Visindigo应用程序的main.cpp文件应该是这样:

#include <General/VIApplication.h>
#include "MyApplicationMainClass.h"
int main(int argc, char* argv[]) {
        VIAppStatic::setEnvConfig(...); // 可选,如果需要变更相关配置

        Visindigo::General::VIApplication app(argc, argv, Visindigo::General::VIApplication::WidgetApp); // 以Widget为例
        app.setMainPlugin(new MyApplicationMainClass()); // 设置作为主插件的类
        app.setLoadingMessageHandler(new MyLoadingMessageHandlerClass()); // 可选,设置加载消息处理器
        int c = app.start(); // 启动应用程序
        return c;
}

至于MyApplicationMainClass,则是一个继承了Visindigo::General::Plugin类的派生类,在其中实现应用程序的主要逻辑。

Note: VIApplication类是一个单例类,应用程序中只能存在一个VIApplication实例。如果尝试创建多个实例,将会抛出异常。

工作顺序

  • 1. QApplication/QGuiApplication/QCoreApplication与VIApplication同时实例化,因此在 VIApplication实例化之前,也不能使用部分Qt的功能。Qt的环境变量设置函数也应该在VIApplication实例化之前调用。
  • 2. 调用Visindigo内部各模块对应内置插件的onPluginEnable()函数
  • 3. 启用LoadingMessageHandler(如果有设置)。
  • 4. 调用主插件的Plugin::onPluginEnable()函数。
  • 5. 按优先级顺序加载全部插件到内存,然后按优先级顺序调用它们的Plugin::onPluginEnable()函数。
  • 6. 按优先级顺序调用全部插件的Plugin::onApplicationInit()函数。
  • 7. 按优先级顺序调用全部插件的Plugin::onTest()函数(如果对应插件启用了测试功能)。
  • 8. 禁用LoadingMessageHandler(如果有设置)。
  • 9. 调用Visindigo内部各模块对应内置插件的onApplicationInit()函数
  • 10. 调用主插件的Plugin::onApplicationInit()函数和Plugin::onTest()函数(如果启用了测试功能)。
  • 11. 应用程序正式启动,进入事件循环。
  • 12. 当应用程序退出时,按优先级顺序逆序调用全部插件的Plugin::onPluginDisable()函数。
  • 13. 调用主插件的Plugin::onPluginDisable()函数
  • 14. 调用Visindigo内部各模块对应内置插件的onPluginDisable()函数。
  • 15. 保存日志文件并清理资源。

Note: 如您所见,此表没有给发出日志管理器的实例化时间,因为它是按需实例化的,即在第一次使用日志功能时才会实例化。 它甚至可以在VIApplication实例化之前被使用(但不推荐)。

成员类型文档

[since Visindigo 0.13.0] enum VIApplication::AppType

此枚举定义了VIApplication支持的应用程序类型。

ConstantValueDescription
Visindigo::General::VIApplication::CoreApp0表示控制台应用程序,等同于Qt中的QCoreApplication
Visindigo::General::VIApplication::GuiApp1表示GUI应用程序,等同于Qt中的QGuiApplication
Visindigo::General::VIApplication::WidgetApp2表示Widget应用程序,等同于Qt中的QApplication

提示:如果要创建QML应用程序,请使用GuiApp类型。

这个enum 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] enum VIApplication::EnvKey

此枚举定义了VIApplication支持的环境配置键。

ConstantValueDescription
Visindigo::General::VIApplication::LogFolderPath0日志文件夹路径,类型为QString,默认值为"./user_data/logs"。值得注意的是,这个文件夹也用于存放崩溃报告文件和命令行历史记录文件。
Visindigo::General::VIApplication::LogFileNameTimeFormat1日志文件名时间格式,类型为QString,默认值为"yyyy-MM-dd_hh_mm_ss"。
Visindigo::General::VIApplication::LogTimeFormat2日志时间格式,类型为QString,默认值为"yyyy-MM-dd hh:mm:ss.zzz"。
Visindigo::General::VIApplication::PluginFolderPath3插件文件夹路径,类型为QString,默认值为"./user_data/plugins"。
Visindigo::General::VIApplication::ConfigPath4存放各插件配置文件的文件夹根路径,类型为QString,默认值为"./user_data/config/plugins"。注意, 由于程序会扫描整个PluginFolderPath目录来加载插件,因此不建议把这个目录设为PluginFolderPath的子目录,可能会影响插件加载性能。
Visindigo::General::VIApplication::MinimumLoadingTimeMS5最小加载时间(毫秒),这个停留时间有助于显示一段时间的程序Logo。类型为qint, 默认值为3000。
Visindigo::General::VIApplication::UseVirtualTerminal6是否使用虚拟终端,类型为bool,默认值为false。
Visindigo::General::VIApplication::TerminalAutoShow7是否自动显示虚拟终端,类型为bool,默认值为false。仅当UseVirtualTerminal为true时有效。 如果为true,则在应用程序启动时会自动显示虚拟终端窗口;如果为false,则需要用户手动调用VIApplication::getVirtualTerminal()->show()来显示虚拟终端窗口。
Visindigo::General::VIApplication::ThemeFolderPath8主题文件夹路径,类型为QString,默认值为"./user_data/themes"。
Visindigo::General::VIApplication::SaveCommandHistory9是否保存命令历史,类型为bool,默认值为false。
Visindigo::General::VIApplication::DefaultColorTheme10默认颜色主题,类型为QString,默认值为"Auto"。Auto意味着程序会在 启动时感知当前系统的颜色主题。

这个enum 从 Visindigo 0.13.0 开始支持。

成员函数文档

[since Visindigo 0.13.0] VIApplication::VIApplication(int &argc, char **argv, Visindigo::General::VIApplication::AppType appType = WidgetApp, bool changeWorkingDirToExeDir = true)

创建VIApplication类的新实例。 argcargv 参数与Qt的QCoreApplicationQGuiApplicationQApplication类的构造函数参数相同。 appType 参数指定应用程序的类型,默认为WidgetAppchangeWorkingDirToExeDir 参数指定是否将当前工作目录更改为可执行文件所在目录,默认为true。

这个function 从 Visindigo 0.13.0 开始支持。

[noexcept, since Visindigo 0.13.0] VIApplication::~VIApplication()

销毁VIApplication实例并释放相关资源。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void VIApplication::addDependencyPlugin(Visindigo::General::Plugin *plugin)

添加一个依赖插件。 plugin 指向依赖插件对象的指针。依赖插件必须继承自Visindigo::General::Plugin类。 依赖插件是主插件依赖的插件,VIApplication会在启动过程中先加载并启用这些依赖插件,然后再加载和启用主插件。 必须在调用start()函数之前添加依赖插件,如果在应用程序已经启动后调用此函数,将不会生效。 注意,添加依赖插件并不会自动将它们添加到主插件的依赖列表中,用户需要手动在主插件中调用Plugin::addDependency()函数来添加这些依赖关系。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool VIApplication::applicationStarted() const

检查应用程序是否已经启动。 return 为true表示应用程序已经启动,false表示尚未启动。

此函数允许用户检查应用程序的启动状态。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] QList<Visindigo::General::Plugin *> VIApplication::getDependencyPlugins() const

return 当前设置的全部依赖插件对象的指针列表。 如果尚未添加任何依赖插件,则返回一个空列表。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] QVariant VIApplication::getEnvConfig(Visindigo::General::VIApplication::EnvKey key)

return 应用程序的环境配置参数。 key 环境配置键,参见EnvKey枚举。 return 为对应的环境配置值,类型为QVariant。如果键不存在,则返回一个默认构造的QVariant对象。

此函数允许用户获取应用程序的环境配置参数,如日志文件路径、插件文件路径等。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] Visindigo::General::VIApplication *VIApplication::getInstance()

return VIApplication单例对象的指针。 虽然VIApplication是一个单例类,但此函数不会在实例不存在时创建它。请确保在调用此函数前已正确初始化VIApplication

这是Visindigo单例类getInstance()函数的一个特例。其他单例类的getInstance()函数均会在实例不存在时创建它们。请注意区分。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] Visindigo::General::Plugin *VIApplication::getMainPlugin() const

return 当前设置的主插件对象的指针。 如果尚未设置主插件,则返回nullptr。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] Visindigo::Widgets::Terminal *VIApplication::getVirtualTerminal() const

return 应用程序的虚拟终端窗口。 return 为指向虚拟终端窗口对象的指针。如果未启用虚拟终端功能,则返回nullptr。 此函数允许用户获取应用程序的虚拟终端窗口,以便在其中执行命令行操作。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.15.0] bool VIApplication::isWindows11()

return 系统是否为Windows11。

这个function 从 Visindigo 0.15.0 开始支持。

[static, since Visindigo 0.15.0] bool VIApplication::isWindows()

return 系统是否为Windows。

这个function 从 Visindigo 0.15.0 开始支持。

[since Visindigo 0.13.0] void VIApplication::onException(const Visindigo::General::Exception &ex)

处理应用程序运行过程中捕获的异常。 ex 捕获的异常对象。

此函数由VIApplication内部调用,用于处理在应用程序运行过程中捕获的异常。 如果设置了异常消息处理器,将会调用其相关函数来处理异常消息。 如果异常是严重的且应用程序已经启动,将会退出应用程序。

如果用户有需要,也可以手动塞入一个异常对象来调用此函数,以便使用VIApplication的异常处理机制。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] void VIApplication::setEnvConfig(Visindigo::General::VIApplication::EnvKey key, const QVariant &value)

设置应用程序的环境配置参数。 key 环境配置键,参见EnvKey枚举。 value 环境配置值,类型为QVariant

此函数允许用户自定义应用程序的环境配置参数,如日志文件路径、插件文件路径等。 必须在创建VIApplication实例之前调用此函数,否则可能无法生效。

实际上在启动程序之后仍然会正确保存这些配置,但某些功能在启动后不会重新应用新的配置。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void VIApplication::setExceptionMessageHandler(Visindigo::General::ApplicationExceptionMessageHandler *handler)

设置应用程序的异常消息处理器。 handler 指向异常消息处理器对象的指针。异常消息处理器必须继承自Visindigo::General::ApplicationExceptionMessageHandler类。

异常消息处理器用于处理应用程序在运行过程中捕获的异常消息,例如在GUI界面中显示异常信息对话框等。 必须在调用start()函数之前设置异常消息处理器,如果在应用程序已经启动后调用此函数,将不会生效。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void VIApplication::setGlobalFont(const QString &fontPath, int fontID = 0)

设置应用程序的全局字体。 fontPath 字体文件的路径。 fontID 字体文件中字体的索引,默认为0。

此函数允许用户为整个应用程序设置统一的字体。字体文件可以是TTF、OTF等常见字体格式。 如果加载字体失败,将会抛出异常。

这是一个对Qt字体加载的简单封装。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void VIApplication::setLoadingMessageHandler(Visindigo::General::ApplicationLoadingMessageHandler *handler)

设置应用程序的加载消息处理器。 handler 指向加载消息处理器对象的指针。加载消息处理器必须继承自Visindigo::General::ApplicationLoadingMessageHandler类。

加载消息处理器用于处理应用程序在启动过程中产生的加载消息,例如在GUI界面中或在控制台中显示加载进度等。 必须在调用start()函数之前设置加载消息处理器,如果在应用程序已经启动后调用此函数,将不会生效。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void VIApplication::setMainPlugin(Visindigo::General::Plugin *plugin)

设置应用程序的主插件。 plugin 指向主插件对象的指针。主插件必须继承自Visindigo::General::Plugin类。

主插件是应用程序的核心逻辑所在,VIApplication会在启动过程中调用主插件的相关函数以初始化应用程序。 必须在调用start()函数之前设置主插件,如果在应用程序已经启动后调用此函数,将不会生效。

Visindigo不允许用户不使用主插件,因为部分程序配置和功能是通过主插件来实现的, 如果没有主插件,应用程序将无法正常运行。所以,也不建议在main函数中额外编写其他涉及 资源加载或初始化的代码,应该把这些逻辑放在主插件中实现,避免破坏逻辑封装。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] int VIApplication::start()

启动应用程序的主事件循环。 此函数会加载并启用所有插件,初始化应用程序,并进入主事件循环。 return 为应用程序退出时的返回码。

在调用此函数之前,应该先设置主插件和加载消息处理器(如果有的话)。 如果应用程序已经启动,将会抛出异常。

此函数是VIApplication类的核心功能,负责管理应用程序的生命周期。

这个function 从 Visindigo 0.13.0 开始支持。