Qt Installer Framework使用教程:

2023-11-16

步骤一:
    下载并安装Qt Installer Framework工具
    http://download.qt.io/official_releases/qt-installer-framework/ 
    将安装目录添加到环境变量,如安装D盘时D:\Qt\QtIFW-4.5.0\bin
步骤二:
    将测试例子(如D:\Qt\QtIFW-4.5.0\examples\tutorial)拷贝到某一目录如:D:\Qt\test                           config 目录: 配置                                                                                                                             packages 目录: 安装包,里面可以有多个文件夹,一个文件夹代表一个安装组件(比如一个程序需要自身和数据库软件。就分为两个组件),每个文件夹下分data 和 meta 目录,data就是程序压缩包,meta是配置相关      
步骤三:
    修改版本号(config\config.xml, packages\com.vendor.product\meta\package.xml)
    修改程序packages\com.vendor.product\data\xxx包中要安装的程序为最新。
步骤四:
    打开Qt 5.12.4(MSVC2017 64-bit) 切换目录到打包文件夹: D:\Qt\test。
    运行命令:binarycreator --offline-only -c config/config.xml -p packages xc2000-V1.0.3.0.exe

一些配置文件与函数说明:
Config目录中配置文件说明:
元素                        是否必需    描述
Name                        必需        正在安装的产品名称
Version                        必需        安装软件的版本,格式要求:`[0-9]+((.
Title                        可选        标题栏上显示的安装程序的名称
Publisher                    可选        软件发行商(如Windows控制面板中所示)
ProductUrl                    可选        指向包含您网站上产品信息的网页的网址
Icon                        可选        自定义安装程序图标的文件名。通过附加'.icns'(OS X),'.ico'(Windows)或'.png'(Unix)后缀来查找实际文件。 已弃用 ,请改用<InstallerApplicationIcon>或<InstallerWindowIcon>
InstallerApplicationIcon    可选        自定义安装程序图标的文件名。 通过附加'.icns'(OS X),'.ico'(Windows)后缀来查找实际文件。 在Unix上没有此功能
InstallerWindowIcon            可选        安装程序应用程序的自定义窗口图标的文件名(PNG格式)
Logo                        可选        用作QWizard::LogoPixmap的徽标的文件名
Watermark                    可选        用作QWizard::WatermarkPixmap的水印的文件名
Banner                        可选        用作QWizard::BannerPixmap(横幅)的文件名(仅由ModernStyle使用)
Background                    可选        用作QWizard::BackgroundPixmap的图像的文件名(仅由MacStyle使用)
WizardStyle                    可选        设置要使用的向导样式 ("Modern"(现代), "Mac", "Aero"或"Classic"(经典))
WizardDefaultWidth            可选        像素单位的默认向导(Wizard)宽度,设置的横幅图像(Banner Image)将覆盖在此
WizardDefaultHeight            可选        以像素为单位设置向导的默认高度,设置水印图像将覆盖在此
TitleColor                    可选        设置标题和字幕的颜色(采用HTML颜色代码,例如“#88FF33”)
RunProgram                    可选        如果用户接受操作,则在安装程序完成后执行命令。要提供应用程序的完整路径
RunProgramArguments            可选        传递给<RunProgram>中指定的程序的参数。您可以添加多个<Argument>子元素,每个子元素为<RunProgram>指定一个参数
RunProgramDescription        可选        安装后运行程序的复选框旁边显示的文本。如果<RunProgram>设置,但没有提供说明,用户界面将显示运行程序<Name>替代
StartMenuDir                可选        Windows开始菜单中产品的默认程序组名称
TargetDir                    可选        安装的默认目标目录。在Linux上,这通常是用户的主目录(/home/username/)
AdminTargetDir                可选        具有管理员权限的安装的默认目标目录。仅在Linux上可用,通常不建议在管理员用户的主目录中安装
RemoteRepositories            可选        远程存储库列表。此元素可以包含多个<Repository>子元素,每个子元素包含指定用于访问存储库的URL的<Url>子元素。有关更多信息,请参阅配置存储库
MaintenanceToolName            可选        生成的维护工具的文件名。默认为maintenancetool。将附加平台特定的可执行文件扩展名
MaintenanceToolIniFile        可选        用于生成维护工具配置的文件名。默认为MaintenanceToolName.ini
RemoveTargetDir                可选        如果卸载时不删除目标目录(TargetDir),请设置为false
AllowNonAsciiCharacters        可选        如果安装路径可以包含 非ASCII字符 ,请设置为true
RepositorySettingsPageVisible    可选    设置为false来 隐藏 设置对话框中的 存储库设置页面
AllowSpaceInPath            可选        如果安装路径 不能包含空格字符 ,请设置为false
DependsOnLocalInstallerBinary    可选    如果要禁止从外部资源(如网络驱动器)安装,请设置为true。 这可能有意义,例如,安装程序非常大。该选项仅在Windows上使用
TargetConfigurationFile        可选        目标的配置文件名。默认是components.xml
Translations                可选        用于翻译用户界面的语言代码列表。要添加多个语言变体,请指定多个<Translation>子元素,每个元素指定语言变体的名称。该项可选。有关详细信息,请参阅翻译页
UrlQueryString                可选        此字符串必须采用key = value形式,并且将附加到存档下载请求。这可以用于向托管存储库的web服务器传输信息
ControlScript                可选        自定义安装程序控制脚本的文件名。请参阅控制脚本
CreateLocalRepository        可选        如果要在安装目录中 创建本地存储库 ,请设置为true。此选项对在线安装程序没有影响。存储库将自动添加到默认存储库列表


Package目录中配置文件说明:
元素                        是否必需    描述
DisplayName                    必需        组件的可读名称
Description                    必需        组件的可读描述。将描述的翻译指定为附加说明标记的值,并将xml:lang属性设置为正确的语言环境。如果找不到与语言环境匹配的翻译文件,且存在未翻译的版本,则使用未翻译版本。否则,将不显示该描述
Version                        必需        组件的版本号格式为:`[0-9]+((.
ReleaseDate                    必需        此组件版本发布的日期
Name                        必需        此组件的域标识
Dependencies                可选        此组件依赖的组件的标识符列表(使用逗号分割)。您可以指定版本号,以破折号(-)分隔。您可以使用比较运算符(=, >, <, >= or <=)为版本号添加前缀。请记住,您必须使用字符引用&lt;来避开左尖括号(使用&lt;来插入<,使用&lt; =来插入<=)。更多相关信息,请参阅组件依赖关系
AutoDependOn                可选        此组件具有自动依赖性的组件的标识符列表(逗号分隔)。当且仅当 满足所有指定的依赖关系 时,才安装组件。如果组件对其他组件有自动依赖性,则组件树中组件旁的复选框将隐藏,并自动进行选择。如果组件以前未安装,则只有当选择此列表中的所有组件进行安装时,才会选择安装组件。如果组件已安装,则当选择此列表中的 至少一个组件 进行卸载时,将选择卸载组件。有关更多信息,请参阅组件依赖关系
Virtual                        可选        设置为true可从安装程序中隐藏组件。请注意,在根组件上设置此选项不起作用
SortingPriority                可选        组件在组件树中的优先级。 树从最高优先级到最低优先级排序,在顶部具有最高优先级
Licenses                    可选        安装用户接受的许可协议列表。要添加几个许可证,请添加几个<License>子元素,每个子元素指定许可证名称和文件。 如果有针对此组件列出的翻译,安装程序还将查找翻译的许可证。 它们需要具有与原始许可证文件相同的名称,但是具有添加的区域设置标识符。 例如,如果许可证文件被称为license.txt并且指定了德语翻译,且安装程序还包含一个license_de_de.txt文件(将在德语系统上安装时显示)
Script                        可选        被加载的脚本文件名。有关详细信息,请参阅添加操作
UserInterfaces                可选        要加载的页面列表。 要添加多个页面,请添加多个<UserInterface>子元素,每个子元素指定页面的文件名。有关详细信息,请参阅添加页面
Translations                可选        要加载的翻译文件的列表。要添加多个语言变体,请指定多个<Translation>子元素,每个子元素指定语言变体的文件名。有关详细信息,请参阅翻译页
UpdateText                    可选        如果这是一个更新组件,则将说明添加到组件描述中
Default                        可选        可以设置为true、false、脚本名。true:在安装程序中预先选中组件。此操作仅适用于没有可见子组件的组件。脚本名:在运行时解析执行脚本,计算出布尔值(boolean)。将脚本文件名称添加为此文件中<Script>元素的值。有关脚本示例,请参阅Selecting Default Contents
Essential                    可选        将包标记为必须去强制重启MaintenanceTool程序的。如果有 可用的必要组件更新 ,则程序包管理器保持禁用状态直到该组件更新。当运行updater时,新引入的必要组件将自动安装
ForcedInstallation            可选        确定必须安装的包。最终用户无法在安装程序中取消选择它
Replaces                    可选        要替换的组件列表(逗号分隔)
DownloadableArchives        可选        列出数据文件(逗号分隔),供在线安装程序下载。如果组件中有一些数据,并且package.xml和(或)脚本没有DownloadableArchives值,repogen工具将自动注册找到的数据
RequiresAdminRights            可选        如果程序包需要提升权限进行安装,请设置为true


Operation                    语法                                    用法
Copy                        "Copy" source target                    从source复制一个文件到target
Move                        "Move" source target                    从source移动一个文件到target
SimpleMoveFile                "SimpleMoveFile" source target            从source移动一个文件到target
Delete                        "Delete" filename                        删除filename.指定的文件
Mkdir                        "Mkdir" path                            创建path目录
Rmdir                        "Rmdir" path                            删除path目录
CopyDirectory                "CopyDirectory" sourcePath targetPath    复制sourcePath目录到targetPath
AppendFile                    "AppendFile" filename text                将text追加到filename指定的文件。text被视为ASCII文本
PrependFile                    "PrependFile" filename text                将text添加到filename指定的文件。text被视为ASCII文本
Replace                        "Replace" file search replace            打开文件去查找search字符串,并替换为replace字符串
LineReplace                    "LineReplace" file search replace        打开文件以查找以search字符串开头的行,并用replace字符串替换它。Lines are trimmed before the search.
Execute                        "Execute" [{exitcodes}] command [parameter1 [parameter... [parameter10]]]    执行命令指定的命令。 最多可以传递10个参数。 如果这还不够,可以使用JavaScript字符串数组。可选,您可以在大括号{}中传递以逗号分隔的退出代码列表作为第一个参数,以指定成功执行的退出代码。 默认为{0}。其它可选的命名参数是:"workingdirectory=<your_working_dir>"; "errormessage=<your_custom_errormessage>"此外,一个特殊的参数UNDOEXECUTE将操作的DO步骤与UNDO步骤分开。示例:component.addOperation("Execute", "touch", "test.txt", "UNDOEXECUTE", "rm", "test.txt")
CreateShortcut                "CreateShortcut" filename linkname [arguments]    为filename指定的文件创建一个名为linkname的快捷方式。在Windows上,将创建一个可带参数的 .lik 文件。在Unix上,将创建一个符号链接
CreateDesktopEntry            "CreateDesktopEntry" filename "key=value[ key2=value2[ key3=value3]]]"    创建一个.desktop初始化文件,如freedesktop.org指定的。如果filename是绝对路径,则桌面条目存储在那里。 否则,它存储在$XDG_DATA_DIRS/applications或$XDG_DATA_HOME/applications中指定的位置,包括由freedesktop.org定义的两者的默认路径。键值对将写入文件。该文件设置为使用UTF-8编码
InstallIcons                "InstallIcons" directory [Vendorprefix]    将目录的内容安装到由freedesktop.org指定的位置。也就是$XDG_DATA_DIRS/icons,/usr/share/icons或$HOME/.icons。 文件将从其初始位置删除。请确保在从归档中提取文件的操作之后添加此操作。如果您提供Vendorprefix,它会替换所有字符,直到遇到 带有此前缀 的图标文件名中的第一个破折号-
Extract                        "Extract" archive targetdirectory        提前archive内容到targetdirectory
GlobalConfig                "GlobalConfig" company application key value 
                            或"GlobalConfig" scope company application key value或"GlobalConfig" filename key value        在配置文件中存储键的值。 配置文件由文件名(使用QSettings::NativeFormat,可能是Windows注册表)或应用程序和公司名称指定。将范围设置为SystemScope以在系统范围中创建条目。注意: 该操作当前使用QSettings来存储键值对。QSettings始终将反斜杠视为特殊字符,并且不提供用于读取或写入此类条目的API。不要在段落或键名称中使用斜杠(/和''); 反斜杠字符用于分隔子键。 在Windows中,''被QSettings转换为/,这使它们相同。 因为QSettings使用反斜杠字符来分隔子键,所以 无法读取或写入包含斜杠或反斜杠的Windows注册表项 。 如果需要,您应该使用本机Windows API。
EnvironmentVariable            "EnvironmentVariable" key value [persistent [system]]    设置环境变量key为value如果persistent设置为true,那么将永久设置该变量。目前仅支持Windows。如果system设置为true,则该变量设置在系统范围内有效,而不是仅对当前用户
RegisterFileType            "RegisterFileType" extension command [description [contentType [icon]]]    注册要通过命令打开的扩展名的文件类型。 可选,你可以指定描述(description)、内容类型(contentType)和图标(icon)。当前仅支持Windows
ConsumeOutput                "ConsumeOutput" installerKeyName executablePath processArguments    保存运行带有参数processArguments的executablePath的可执行文件的输出到installerKeyName指定的安装程序键。 可以传递其他参数
CreateLink                    "CreateLink" linkPath targetPath    创建从linkPath指定的位置到由targetPath指定的位置的链接
CreateLocalRepository        "CreateLocalRepository" binaryPath repoPath    创建一个本地存储库在repoPath指定的目录。对于离线安装程序,将二进制数据存储在binaryPath指定的目录
FakeStopProcessForUpdate    "FakeStopProcessForUpdate" processlist    在卸载期间匹配运行进程与processlist中的条目(逗号分隔)。 如果找到匹配,则显示一个消息框,要求用户在继续之前停止这些进程
License                        "License" licenses                        将licenses指定的许可证文件复制到目标目录中名为Licenses的子文件夹。对于在包描述文件中声明的包,将自动添加此操作
MinimumProgress                "MinimumProgress"                        将进度值增加1
SelfRestart                    "SelfRestart" core                        重新启动由core指定的updater或软件包管理器
Settings                    "Settings" path method key aValue        根据method的值:set、remove、add_array_value和remove_array_value,来设置或删除位于path的settings文件或注册表中key的值aValue

一此常用方法:
function Controller() {
    // 判断是否是卸载程序
    if(installer.isUninstaller()){
        installer.uninstallationStarted.connect(this, this.uninstallationStarted);
    }
    // 判断是否是安装程序
    if(installer.isInstaller()){
        installer.installationStarted.connect(this,this.installationStarted);
    }
}

// 卸载开始前需要执行的操作
Controller.prototype.uninstallationStarted = function() {
    installer.execute("touch","/home/centos/test_TTTTT");
    installer.execute("mkdir","/home/centos/TestWorkstation");
    installer.execute("mkdir","${HOME}/TestWorkstation/Databases");
    installer.execute("cp",["/home/centos/TestWorkstation/app.png","/home/centos/TestWorkstation/test"]);
}

// 开始安装前执行的操作
Controller.prototype.installationStarted = function() {
    installer.execute("touch","/home/centos/test_Start");
}

范例

要安装一个test 软件,,他依赖安装数据库

config 目录下分两个文件config.xml 、 controller.qs

<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>Test</Name>
    <Version>1.0.3.0</Version>
    <Title>Test</Title>
    <Publisher>xxxxx</Publisher>
    <InstallerApplicationIcon>app</InstallerApplicationIcon>
    <StartMenuDir>Test</StartMenuDir>
    <MaintenanceToolName>UnTest</MaintenanceToolName>
    <TargetDir>D:\Test\</TargetDir>
    <RemoveTargetDir>false</RemoveTargetDir>
    <CreateLocalRepository>true</CreateLocalRepository>
    <InstallActionColumnVisible>true</InstallActionColumnVisible>
    <ControlScript>controller.qs</ControlScript>
</Installer>

function Controller()
{
    // 判断是否是卸载程序
    if(installer.isUninstaller()){
        installer.uninstallationStarted.connect(this, this.uninstallationStarted);
    }
}

// 卸载开始前需要执行的操作
Controller.prototype.uninstallationStarted = function() {
    installer.execute("@TargetDir@/uninstall-db.bat");
}
 

packages 目录下两个目录 Test 和TestDB ,分别安装软件和数据库

其中Test目录下的meta下配置 package.xml、test.qs 分别如下

<?xml version="1.0"?>
<Package>
    <DisplayName>Test</DisplayName>
    <Description>Test版本1.0.3.0主要功能程序.</Description>
    <Version>1.0.3.0</Version>
    <ReleaseDate>2022-12-26</ReleaseDate>
    <Default>true</Default>
    <Script>test.qs</Script>
    <SortingPriority>100</SortingPriority>
</Package>


function Component()
{
    // default constructor
}

Component.prototype.createOperations = function()
{
    // call default implementation to actually install README.txt!
    component.createOperations();

    if (systemInfo.productType === "windows") {
        component.addOperation("CreateShortcut", "@TargetDir@/Test/Test.exe", "@HomeDir@/Desktop/Test.lnk");
        component.addOperation("CreateShortcut", "@TargetDir@/Test/Test.exe", "@StartMenuDir@/Test.lnk");
        component.addOperation("CreateShortcut", "@TargetDir@/UnTest.exe", "@StartMenuDir@/UnTest.lnk");
    }
}

TestDB目录下配置如下

<?xml version="1.0"?>
<Package>
    <DisplayName>数据库</DisplayName>
    <Description>Test程序支持的数据库.</Description>
    <Version>5.7.29</Version>
    <ReleaseDate>2014-08-25</ReleaseDate>
    <Default>false</Default>
    <Script>dbTest.qs</Script>
    <SortingPriority>90</SortingPriority>
</Package>

function Component() {
    installer.finishButtonClicked.connect(this, Component.prototype.installationFinished);
}

Component.prototype.createOperations = function()
{
    component.createOperations();
}

Component.prototype.installationFinished = function()
{
    if(component.isInstalled())
    {
        try 
        {
            if (installer.isInstaller() && installer.status == QInstaller.Success) 
            {
               installer.execute("@TargetDir@/install-db.bat");
            }
        } 
        catch(e) 
        {
            console.log(e);
        }
    }
}
 


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt Installer Framework使用教程: 的相关文章

  • 读取大文件并制作字典

    我有一个大文件 我需要读取它并从中制作字典 我希望这一切能够尽可能快 然而我的Python代码太慢了 这是一个显示问题的最小示例 首先制作一些假数据 paste lt seq 20000000 lt seq 2 20000001 gt la
  • C++0x 初始值设定项列表示例

    我想看看这个现有代码示例如何利用 C 0x 初始化列表功能 示例0 include
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • += 运算符在 C++ 中是如何实现的?

    这是我一直在思考的一个问题 但从未找到任何资源来说明这个问题的答案 事实上它不仅是为了 也适用于它的兄弟姐妹 即 等等 当然不是 考虑这个例子 int a 5 a 4 this will make a 9 现在考虑等效表达式 a a 4 T
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 为什么 rand() 总是返回相同的值? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中生成随机数 https stackoverflow com questions 3067364 generating random numbers in c 使用 rand 生成随机数 http
  • 如果我重新分配并且新大小为 0,会发生什么情况。这与释放等效吗?

    给出以下代码 int a NULL a calloc 1 sizeof a printf d n a a realloc a 0 printf d n a return 0 它返回 4078904 0 这个 realloc 相当于 free
  • 确定相关词的编程方式?

    使用网络服务或软件库 我希望能够识别与词根相关的单词 例如 座位 和 安全带 共享词根 座位 但 西雅图 不会被视为匹配 简单的字符串比较对于这类事情似乎是不可行的 除了定义我自己的字典之外 是否有任何库或 Web 服务不仅可以返回单词定义
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 如何使用 C# 将表格粘贴到 Ms-Word 文档的末尾

    我有一个预制的 Word 模板 其中有一个表格 我想打开它 然后在文档末尾添加 粘贴 另一个表格 问题是它不会转到文档的末尾 而是将新表格粘贴到原始表格的第一个单元格中 任何帮助将不胜感激 previous code copied a ta
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 模板定义中的友元函数

    我的问题有点相关this https stackoverflow com questions 1297609 overloading friend operator for template class one 我想重载某些类的运算符 te
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User
  • C# 和断点 - 这里有魔术师吗?

    我有这个 public static void ByLinkText string text for var i 0 i lt 50 i try Setup Driver FindElement By LinkText text Click
  • boost::spirit::qi::语法和可变参数模板

    我在使用可变参数模板定义语法时面临一个问题 我首先定义一些包含在某些结构中的简单语法 例如纬度 经度 如下所示 include
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v

随机推荐

  • 图像拼接技术步骤归纳

    前言 图像拼接也是计算机视觉领域的一个研究热点 本人这段时间内也对该算法进行了一番研究 在这里把其思想步骤简单归纳总结一下 以免忘记 一 算法目的 随便拍摄两张图片 图1和图2 两图之间有相同的拍摄区域 需要将两幅图无缝拼接在一起 完全接壤
  • AcWing 1227. 分巧克力(二分)

    输入样例 2 10 6 5 5 6 输出样例 2 include
  • 归并排序(递归,非递归)

    目录 写在前面的话 一 归并思想 二 归并排序递归实现 2 1思想实现 2 2排序实现 2 3代码实现 三 归并排序非递归实现 3 1思路实现 小区间优化 3 2边界值处理 3 2代码实现 写在前面的话 小伙伴们大家好啊 今天依旧小菜鸡库森
  • 高并发,你真的理解透彻了吗

    高并发 几乎是每个程序员都想拥有的经验 原因很简单 随着流量变大 会遇到各种各样的技术问题 比如接口响应超时 CPU load升高 GC频繁 死锁 大数据量存储等等 这些问题能推动我们在技术深度上不断精进 在过往的面试中 如果候选人做过高并
  • C++ 捕捉 crash 信号(win&Linux)

    目录 Win 函数说明 具体例子 Linux 具体例子 作为一个程序员 必现的 bug 容易排查 最怕遇见非必现 bug 尤其是那种在自己环境上测多少次都没问题 到用户环境偶尔会 crash 无从下手 让人瞬间抓狂 并且像这种非必现 bug
  • java spring cloud 使用nacos配置多数据源(druid)AbstractRoutingDataSource

    第一步 在nacos中加入 spring datasource master url jdbc mysql base mysql 3306 XXX characterEncoding utf8 zeroDateTimeBehavior co
  • 常用测试工具-----SecureCRT

    目录 1 1 SecureCRT简介 1 2 SecureCRT用途 1 3 SecureCRT操作 1 3 1 SecureCRT 串口连接 1 3 2 SecureCRT 日志记录 1 3 3 SecureCRT 日志记录 1 3 4
  • 矩阵论——正交向量

    向量正交 向量 u u u与向量 v v v正交 u
  • WPF中判断滚动条滚动条滑倒了最底端

    先是获取滚动条的方法 可以获取到空间内部自带的ScrollViewer region 获取所有控件子级元素的方法 返回该类型的List集合 public static List
  • 自己写不出代码我该怎么办

    在作业和练习中 自己写不出代码 这是一个在学习中经常出现的问题 那么该怎么解决这个问题呢 1 先分析实现的思路 拿到作业 按照要实现的功能 先分析去实现的思路 如果完全不知到该怎么去实现 完全是一头雾水 那最好就先看看其他人是如何实现的 或
  • simulink的模块封装与解封装

    MATLAB Simulink 使用技巧 模块封装 简单 1 新建或者打开Simulink仿真环境 2 选择需要封装的部分 单击鼠标右键选择 create subsystem 选项即可封装模块 MATLAB Simulink 使用技巧 模块
  • 在微信小程序中 使用uView rules 表单校验 validator 不起作用(无效)

    注意 如果需要兼容微信小程序 最好通过setRules方法设置rules规则 onReady 如果需要兼容微信小程序 并且校验规则中含有方法等 只能通过setRules方法设置规则 this refs form1 setRules this
  • Sublime4如何自定义代码补全内容

    1 先进入如下文件夹 2 这里举C 为例子 其他语言类似 创建C 文件夹 并在C 文件夹内创建Snippets文件夹 3 在Snippets文件夹下创建以 sublime snippet为后缀的文件 4 在文件中自定义代码补全的信息
  • vue 在style标签中使用变量

    1 定义变量 export default data return 背景y颜色 backgroundColor 00f 字体颜色 fontColor f00 2 在HTML中设置CSS使用的变量
  • [深入研究4G/5G/6G专题-22]: 5G NR开机流程3.4 - MAC层对SIB1的调度 - SIB1消息的格式与内容

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 前置条件 第1章 SIB1消息的格式 内容解析
  • Android sqlite常见sql语句

    创建一个测试表man select from man 查询man表所有信息 select from man where name like 四 删除操作 delete from man where name lucy2 部分字段查询 sel
  • java.sql.SQLException: The user specified as a definer (‘combined‘@‘%‘) does not exist

    java sql SQLException The user specified as a definer combined does not exist 今天我把公司的项目拷回来处理一些遗留的问题 文明的我 爆了粗口TMD 罪过罪过 话不
  • React中高阶组件、Render props、hooks

    这三者都是react中解决代码复用的主要方式 1 HOC 在官方解释中 高阶组件 HOC 是 React 中复用组件逻辑的一种高级技巧 HOC自身不是 React API 的一部分 它是一种基于 React 的组合特性而形成的一种设计模式
  • springCloud整合 Hystrix熔断器(配置)

    springCloud整合 Hystrix熔断器 文章目录 springCloud整合 Hystrix熔断器 前言 一 添加Hystrix依赖 二 properties文件开启熔断器 三 为调用另一个服务的接口添加实现类 前言 在分布式环境
  • Qt Installer Framework使用教程:

    步骤一 下载并安装Qt Installer Framework工具 http download qt io official releases qt installer framework 将安装目录添加到环境变量 如安装D盘时D Qt Q