воскресенье, 10 февраля 2019 г.

MS Visual Studio и mocinclude.tmp

Если в вашем проекте больше 40 путей include, которые описаны в INCLUDEPATH, то Qt создает временный файл mocinclude.tmp, в который включает все описанные пути.
Проблема в том, что студия не совсем корректно обрабатывает этот файл. Выражается это в том, что при каждой сборке студия начинает полностью пересобирать проект вместо того, чтобы пересобрать только измененные файлы.
Чтобы не допустить создания mocinclude.tmp надо изменить в Qt файл

d:\qt\mkspecs\features\moc.prf

изменив строчку
win32:count($$list($$INCLUDEPATH), 40, >) {
на 
win32:count($$list($$INCLUDEPATH), 100, >) {

Таким образом мы просто увеличили количество путей с 40 до 100.

среда, 6 февраля 2019 г.

Qt Installer: удаление по маске

Qt Installer не умеет удалять файлы по маске.
Нельзя просто так взять и написать
 component.addOperation("Execute", "rm", "-f", "files*");
Это не сработает. Это обходится вызовом командного интерпретатора

Для Windows
      component.addOperation("Execute", "cmd.exe", "/C", "del", "files*.*");

Для Linux
      component.addOperation("Execute", "bash", "-c", "rm -f files*");
Последний параметр для Linux надо писать целиком, не разделяя на части. В этом случае Qt Installer при вызове обернет команду кавычками и результат будет как если бы вы вызвали команду
bash -c "rm -f files*" 

вторник, 5 февраля 2019 г.

Qt Installer: replace

Qt Installer использует скриптовый язык ECMAScript (http://doc.qt.io/qt-5/ecmascript.html)
По структуре он схож с JavaScript, но полностью они не пересекаются.
Но решения можно искать и по JavaScript.
Например, функция replace меняет только первое вхождение в строку.
var str = "bla-bla-bla";
str.replace("bla", "vobla");
Получим vobla-bla-bla.
Чтобы заменить все вхождения, надо использовать регулярку.
str.replace(/bla/g, "vobla");

Qt Installer