我使用Qt安装程序框架。
我想知道如何防止在非空文件夹中安装?
此外,如何使卸载程序仅删除已安装的文件和文件夹,而不删除其文件夹的所有内容?
提前谢谢
答案 0 :(得分:0)
由于Qt文档的原因,您可以访问脚本API中的QDesktopServices,该脚本API包含函数findFiles(string path,string pattern)
,在您的情况下该函数不应返回任何内容,其中path是安装的目标目录。
在TargetDirectory安装程序Installer Page中,您可以通过Installer Page访问设置的TargetDirectory,如果进行一些编辑,可以将其连接到该目录。
我花了一些时间来找出以下解决方案,但我必须承认,这不是我想事先获得的方法。
首先,您需要一个控制脚本,该脚本需要在config.xml
内部进行设置。它称为controlScript.js
,与您的config.xml
位于同一目录。
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>Your application</Name>
<Version>1.0.0</Version>
<Title>Your application Installer</Title>
<Publisher>Your vendor</Publisher>
<StartMenuDir>Super App</StartMenuDir>
<TargetDir>@HomeDir@/InstallationDirectory</TargetDir>
<ControlScript>controlScript.js</ControlScript>
</Installer>
现在,我带来的唯一解决方案是:
controlScript.js
function Controller()
{
console.log("Control script");
}
Controller.prototype.ComponentSelectionPageCallback = function() {
var widget = gui.currentPageWidget();
widget.title="Select empty directory!";
var targetDirWidget = gui.pageById(QInstaller.TargetDirectory);
var targetDir=targetDirWidget.TargetDirectoryLineEdit.text;
var files=QDesktopServices.findFiles(targetDir, "*.*");
if (files.length!=0) {
var result = QMessageBox.warning("quit.question", "You selected a non-empty directory!", targetDir,QMessageBox.Ok);
gui.clickButton(buttons.BackButton);
}
}
基本上,用户输入目标目录并按下BackButton。如果目标目录为非空,则会显示一个消息框,并按下“组件选择”中的BackButton。
我想要的解决方案是事先停用TargetDirectory页面中的NextButton,但是我的所有尝试都是徒劳的。即使下面的禁用NextButton应该起作用,如answer所示。