Visindigo::General::VIApplication Class
class Visindigo::General::VIApplicationVisindigo应用程序的根基,使用部分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中的QCoreApplication、QGuiApplication和QApplication。
此外,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支持的应用程序类型。
| Constant | Value | Description |
|---|---|---|
Visindigo::General::VIApplication::CoreApp | 0 | 表示控制台应用程序,等同于Qt中的QCoreApplication。 |
Visindigo::General::VIApplication::GuiApp | 1 | 表示GUI应用程序,等同于Qt中的QGuiApplication。 |
Visindigo::General::VIApplication::WidgetApp | 2 | 表示Widget应用程序,等同于Qt中的QApplication。 |
提示:如果要创建QML应用程序,请使用GuiApp类型。
这个enum 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] enum VIApplication::EnvKey
此枚举定义了VIApplication支持的环境配置键。
| Constant | Value | Description |
|---|---|---|
Visindigo::General::VIApplication::LogFolderPath | 0 | 日志文件夹路径,类型为QString,默认值为"./user_data/logs"。值得注意的是,这个文件夹也用于存放崩溃报告文件和命令行历史记录文件。 |
Visindigo::General::VIApplication::LogFileNameTimeFormat | 1 | 日志文件名时间格式,类型为QString,默认值为"yyyy-MM-dd_hh_mm_ss"。 |
Visindigo::General::VIApplication::LogTimeFormat | 2 | 日志时间格式,类型为QString,默认值为"yyyy-MM-dd hh:mm:ss.zzz"。 |
Visindigo::General::VIApplication::PluginFolderPath | 3 | 插件文件夹路径,类型为QString,默认值为"./user_data/plugins"。 |
Visindigo::General::VIApplication::ConfigPath | 4 | 存放各插件配置文件的文件夹根路径,类型为QString,默认值为"./user_data/config/plugins"。注意, 由于程序会扫描整个PluginFolderPath目录来加载插件,因此不建议把这个目录设为PluginFolderPath的子目录,可能会影响插件加载性能。 |
Visindigo::General::VIApplication::MinimumLoadingTimeMS | 5 | 最小加载时间(毫秒),这个停留时间有助于显示一段时间的程序Logo。类型为qint, 默认值为3000。 |
Visindigo::General::VIApplication::UseVirtualTerminal | 6 | 是否使用虚拟终端,类型为bool,默认值为false。 |
Visindigo::General::VIApplication::TerminalAutoShow | 7 | 是否自动显示虚拟终端,类型为bool,默认值为false。仅当UseVirtualTerminal为true时有效。 如果为true,则在应用程序启动时会自动显示虚拟终端窗口;如果为false,则需要用户手动调用VIApplication::getVirtualTerminal()->show()来显示虚拟终端窗口。 |
Visindigo::General::VIApplication::ThemeFolderPath | 8 | 主题文件夹路径,类型为QString,默认值为"./user_data/themes"。 |
Visindigo::General::VIApplication::SaveCommandHistory | 9 | 是否保存命令历史,类型为bool,默认值为false。 |
Visindigo::General::VIApplication::DefaultColorTheme | 10 | 默认颜色主题,类型为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类的新实例。 argc 和 argv 参数与Qt的QCoreApplication、QGuiApplication和QApplication类的构造函数参数相同。 appType 参数指定应用程序的类型,默认为WidgetApp。 changeWorkingDirToExeDir 参数指定是否将当前工作目录更改为可执行文件所在目录,默认为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 开始支持。