Взглянув на исходный код Qt VS Tools, можно увидеть, что определения препроцессора добавляются из содержимого файла qmake.conf
, расположенного в <QTDIR>\mkspecs\win32-msvc
, который включает в себя <QTDIR>\mkspecs\common\msvc-desktop.conf
.
Просто добавьте определение QT_NO_FOREACH
к любому из этих файлов, и все новые проекты, использующие эту версию Qt, теперь уберут поддержку Q_FOREACH
. Я предпочитаю добавлять его в common\msvc-desktop.conf
, поскольку он используется во всех проектах VS.
DEFINES += QT_NO_FOREACH
Примечание: после добавления определения используйте новый экземпляр VS, поскольку плагин кэширует содержимое файла qmake.conf
.
Если любопытно, точное место в Qt VS Tools, где эти определения добавляются, находится в методе WriteProjectBasicConfigurations(uint type, bool usePrecompiledHeader, VersionInformation vi)
, файл `` \ src \ qtprojectlib \ QtProject.cs`:
// add some common defines
compiler.SetPreprocessorDefinitions(vi.GetQMakeConfEntry("DEFINES").Replace(" ", ","));
Одной из моих первых мыслей по этому вопросу было изменение шаблона Qt, но у него было два недостатка: шаблоны обновляются с каждой новой версией надстройки, и, что более важно, как вы можете видеть в приведенном выше коде, любые определения препроцессора перезаписываются во время начальной настройки проекта.