Ответ 1
Здесь вы можете использовать условные функции и области:
QT_VERSION = 5 # this can be 4, set manually
equals(QT_VERSION, 5){
QT += widgets
}
equals(QT_VERSION, 4) {
QT += gui
}
Однако есть несколько вещей, на которые нужно обратить внимание в исходном коде:
-
Явное определение версии Qt не требуется, и это может заставить вас получить головную боль, если вы забыли изменить это в файле .pro. Вместо этого qmake автоматически определяет переменную
QT_MAJOR_VERSION
для вас. -
Использование
equals
будет работать в этом случае. Однако, как отмечено ниже,equals
выполняет сравнение строк. Тем не менее, лучше использоватьgreaterThan
иlessThan
, потому что ваш код автоматически перестанет работать, когда вы попытаетесь скомпилировать его с Qt 6 (где-то в будущем). -
Добавление
gui
вQT
не требуется, поскольку оно включено по умолчанию.
Итак, ваш код должен быть:
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
}
Вот некоторые недокументированные qmake
драгоценные камни:
-
defined(func, type)
Возвращает true, если
func
определен; тип должен быть либоtest
, либоreplace
, чтобы соответствоватьdefineTest
илиdefineReplace
. -
equals(var1, var)
(также работает как
isEqual
).
Возвращает true, если var1 равно var2 (сравнение строк). -
lessThan(var1, var2)`
Возвращает true, если
var1
меньшеvar2
(как целое число). -
greaterThan(var1, var2)
Возвращает true, если
var1
больше, чемvar2
(как целое число). -
inFile(file, var, val)
Возвращает true, если в указанном файле определена переменная
var
. Кроме того, он может проверить, имеет ли он запрашиваемое значение. -
load(string)
Что-то вроде между
include()
иCONFIG += [feature]
.load(foo)
будет искать файл с именем "foo.prf" в стандартном пути и немедленно выполнить его содержимое. Функции, которые содержатся вCONFIG
, выполняются последним, после того как файл ".pro" завершил обработку. Какinclude()
, он вернет true, если файл был найден.