Благодаря документации Qt у вас есть доступ к QDesktopServices внутри API сценариев, который содержит функцию findFiles(string path,string pattern)
, которая не должна возвращать ничего в вашем случае, где путь - это ваш целевой каталог для установки.
В программе установки TargetDirectory Страница установщика у вас есть доступ к установленному каталогу 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 в выборе компонентов.
Моим желаемым решением было заранее отключить NextButton на странице TargetDirectory, но все мои попытки были тщетными.Даже если следующее отключение NextButton должно работать, как показано в этом ответе .