Qt QML 杂记

qmake 手册 013 替换函数

2020-07-17  本文已影响0人  赵者也

qmake手册013替换函数

qmake 提供了在配置过程中处理变量内容的函数。这些函数称为替换函数。通常,它们返回可以分配给其他变量的值。可以通过在函数前面加上 $$ 操作符来获得这些值。替换函数可以分为内置函数和函数库。

也可参阅 Test Functions

1. 内置的替换函数

基本替换函数被实现为内置函数。

1.1. absolute_path(path[, base])

返回 path 的绝对路径。

如果没有指定 base,则使用当前目录作为起始目录。如果是相对路径,则在使用前相对于当前目录进行解析。

例如,下面的调用返回字符串 "/home/toby/myproject/readme.txt":

message($$absolute_path("readme.txt", "/home/toby/myproject"))

这个函数是在 Qt 5.0 中引入的。

也可参阅 clean_path()relative_path()

1.2. basename(variablename)

返回在 variablename 中指定的文件的基本名称。

例如:

FILE = /etc/passwd
FILENAME = $$basename(FILE) #passwd

1.3. cat(filename[, mode])

返回 filename 的内容。我们可以为 mode 指定以下选项:

选项 说明
blob 以一个值的形式返回文件的全部内容
lines 作为单独的值返回每一行(没有行结束)
true (默认值)和 false 返回文件内容作为单独的值,根据 qmake 值列表分割规则进行分割(如变量分配)。如果 modefalse,则将只包含换行字符的值插入到列表中,以指示换行符在文件中的位置。

1.4. clean_path(path)

返回目录分隔符规范化(转换为"/")、删除冗余分隔符并且"."和".."都被(尽可能地)处理了的 path。这个函数是对 QDir::cleanPath 的封装。

这个函数是在 Qt 5.0 中引入的。

也可参阅 absolute_path(), relative_path(), shell_path(), system_path()

1.5. dirname(file)

返回指定 file 的目录名部分。例如:

FILE = /etc/X11R6/XF86Config
DIRNAME = $$dirname(FILE) #/etc/X11R6

1.6. enumerate_vars

返回所有已定义变量名的列表。

这个函数是在 Qt 5.0 中引入的。

1.7. escape_expand(arg1 [, arg2 ..., argn])

接受任意数量的参数。它为每个参数展开转义序列 \n\r\t,并以列表的形式返回参数。

注意:如果按字面意思指定要展开的字符串,则需要对反斜杠进行转义,如下面的代码片段所示:

message("First line$$escape_expand(\\n)Second line")

1.8. find(variablename, substr)

返回 variablename 中与正则表达式 substr 匹配的所有值。

MY_VAR = one two three four
MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive
MY_VAR3 = $$member(MY_VAR, 3) $$find(MY_VAR, t.*)
message($$MY_VAR2)
message($$MY_VAR3)

上面示例的输出:

Project MESSAGE: -Lone -Ltwo -Lthree -Lfour -Lfive
Project MESSAGE: four two three

1.9. files(pattern[, recursive=false])

展开指定的通配符模式并返回文件名列表。如果 recursivetrue,则此函数递归执行子目录。

1.10. first(variablename)

返回 variablename 的第一个值。

例如,以下调用返回 firstname:

CONTACT = firstname middlename surname phone
message($$first(CONTACT))

也可参阅 take_first(), last().

1.11. format_number(number[, options...])

options 指定的格式返回 number。我们可以指定以下选项:

选项 说明
ibase=n 设置输入的基数为 n
obase=n 将输出的基数设置为 n
width=n 设置输出的最小宽度为 n。如果输出小于 width,则用空格填充
zeropad 用零代替空格填充输出
padsign 在输出的正值前加一个空格
alwayssign 在输出的正值前加上一个加号
leftalign 将padding放在输出值的右侧

目前不支持浮点数。

例如,下面的调用将十六进制数字 BAD 转换为 002989:

message($$format_number(BAD, ibase=16 width=6 zeropad))

这个函数是在 Qt 5.0 中引入的。

1.12. fromfile(filename, variablename)

将 filename 当做一个 qmake 项目文件,并返回分配给 variablename 的值。

也可参阅 infile()

1.13. getenv(variablename)

返回环境变量 variablename 的值。这基本上等同于 $$(variablename) 语法。但是,getenv 函数支持名称中带有圆括号的环境变量。

这个函数是在 Qt 5.0 中引入的。

1.14. join(variablename, glue, before, after)

variablenameglue 的值连接起来。如果这个值不是空的,这个函数会在这个值前面加上 before 和在后面加上 aftervariablename 是唯一必须的字段,其他字段默认为空字符串。如果需要在 gluebeforeafter 中对空格进行编码,则必须引用它们。

1.15. last(variablename)

返回 variablename 的最后一个值。

例如,以下调用返回 phone:

CONTACT = firstname middlename surname phone
message($$last(CONTACT))

也可参阅 take_last(), first()

1.16. list(arg1 [, arg2 ..., argn])

接受任意数量的参数。它创建一个唯一命名的变量,该变量包含参数列表,并返回该变量的名称。可以使用该变量编写循环,如下面的代码片段所示:

for(var, $$list(foo bar baz)) {
    ...
}

替换:

values = foo bar baz
for(var, values) {
    ...
}

1.17. lower(arg1 [, arg2 ..., argn])

接受任意数量的参数并将它们转换为小写。

也可参阅 upper()

1.18. member(variablename [, start [, end]])

返回 variablename 列表中的值,可以使用 start 指定零开始的元素索引,使用 end 指定结束元素的索引(该函数会包含 startend 元素)。

如果 start 未指定,则使用其默认值 0,此时该函数的功能相当于 $$first(variablename)

如果 end 未指定,则其默认值 将与 start 相等,此用法表示简单的数组索引,因为将只返回一个元素。

也可以在单个参数中指定开始和结束,数字由两个句点分隔。

负数表示从列表末尾开始的索引,而 -1 是最后一个元素。

如果任一索引范围越界,则返回空列表。

如果 end 小于 start,则按相反顺序返回元素。

注意:结束(end)索引是包含的和无序的,这意味着只有当索引无效时(即输入变量为空时)才会返回一个空列表。

也可参阅 str_member()

1.19. num_add(arg1 [, arg2 ..., argn])

接受任意数量的数值参数并将它们相加,返回和。

可以隐式支持减法,因为可以简单地在数值前加一个减号来对其进行取负值 :

sum = $$num_add($$first, -$$second)

如果操作数可能已经是负数,则需要执行另一个额外的步骤来规范化数字:

second_neg = -$$second
second_neg ~= s/^--//
sum = $$num_add($$first, $$second_neg)

这个函数是在 Qt 5.8 中引入的。

1.20. prompt(question [, decorate])

显示指定的 question,并返回从 stdin 读取的值。

如果 decorate 为true(缺省值),question 将获得一个通用的前缀和后缀,将其标识为提示符。

1.21. quote(string)

将整个 string 转换为单个实体并返回结果。这只是将字符串括在双引号中的一种特殊方式。

1.22. re_escape(string)

用反斜杠转义的每个特殊正则表达式字符返回 string。这个函数是 QRegExp::escape的包装器。

1.23. read_registry(tree, key[, flag])

返回目录树 tree 中的注册表项 key 的值。

仅支持目录 HKEY_CURRENT_USER (HKCU)HKEY_LOCAL_MACHINE (HKLM)

flag 的值可以是 WOW64_32KEY (32)WOW64_64KEY (64)

注意:此功能仅在 Windows 主机上可用。

这个函数是在 Qt 5.12.1 中引入的。

1.24. relative_path(filePath[, base])

返回 filePath 相对于 base 的路径。

如果未指定 base,则为当前项目目录。如果是相对的,则在使用前相对于当前项目目录进行解析。

如果 filePath 是相对的,它首先根据基本目录解析;在这种情况下,此函数实际上充当 $$clean_path()

这个函数是在 Qt 5.0 中引入的。

也可参见 absolute_path(), clean_path()

1.25. replace(string, old_string, new_string)

string 提供的变量内容中的 new_string 替换 old_string 的每个实例。例如,代码:

MESSAGE = This is a tent.
message($$replace(MESSAGE, tent, test))

输出:

This is a test.

1.26. resolve_depends(variablename, prefix)

这是一个我们通常不需要的内部功能。

这个函数是在 Qt 5.0 中引入的。

1.27. reverse(variablename)

以相反顺序返回 variablename 的值。

这个函数是在 Qt 5.0 中引入的。

1.28. section(variablename, separator, begin, end)

返回值 variablename 的一部分。这个函数是 QString::section 的包装器。

例如,下面的调用输出 surname:

CONTACT = firstname:middlename:surname:phone
message($$section(CONTACT, :, 2, 2))

1.29. shadowed(path)

将项目源目录的路径映射到构建目录。对于源代码内构建,该函数返回 path 。如果 path 指向源树之外,则返回一个空字符串。

这个函数是在 Qt 5.0 中引入的。

1.30. shell_path(path)

path 中的所有目录分隔符转换为与构建项目时使用的 shell(即由 make 工具调用的 shell)兼容的分隔符。例如,当使用 Windows shell 时,斜杠将转换为反斜杠。

这个函数是在 Qt 5.0 中引入的。

也可参阅 system_path()

1.31. shell_quote(arg)

为构建项目时使用的 shell 引用 arg

这个函数是在 Qt 5.0 中引入的。

也可参阅 system_quote()

1.32. size(variablename)

返回 variablename 的值的数目。

也可参阅 str_size()

1.33. sort_depends(variablename, prefix)

这是一个我们通常不需要的内部功能。

这个函数是在 Qt 5.0 中引入的。

1.34. sorted(variablename)

返回 variablename 中的值列表,其中项按 ASCII 升序排序。

format_number() 函数的帮助下,可以通过将值零填充到固定长度来完成数字排序。

这个函数是在 Qt 5.8 中引入的。

1.35. split(variablename, separator)

将 variablename 的值分割为单独的值,并以列表的形式返回它们。这个函数是 QString::split 的包装器。

例如:

CONTACT = firstname:middlename:surname:phone
message($$split(CONTACT, :))

1.36. sprintf(string, arguments...)

函数用 arguments 以逗号分隔的列表中的参数替换 string 中的%1-%9,并返回处理过的字符串。

1.37. str_member(arg [, start [, end]])

这个函数与 member() 相同,只是它操作的是字符串值而不是列表变量,因此索引引用字符位置。

这个函数可以用来实现许多常见的字符串切片操作:

# $$left(VAR, len)
left = $$str_member(VAR, 0, $$num_add($$len, -1))

# $$right(VAR, len)
right = $$str_member(VAR, -$$num, -1)

# $$mid(VAR, off, len)
mid = $$str_member(VAR, $$off, $$num_add($$off, $$len, -1))

# $$mid(VAR, off)
mid = $$str_member(VAR, $$off, -1)

# $$reverse(VAR)
reverse = $$str_member(VAR, -1, 0)

注意: 在这些实现中,len 为 0 的参数需要单独处理。

也可参阅 member(), num_add().

这个函数是在 Qt 5.8 中引入的。

1.38. str_size(arg)

返回参数中的字符数。

也可参阅 size().

这个函数是在 Qt 5.8 中引入的。

1.39. system(command[, mode[, stsvar]])

我们可以使用 system 函数的这个变体从命令中获取 stdout,并将其分配给一个变量。

例如:

UNAME = $$system(uname -s)
contains( UNAME, [lL]inux ):message( This looks like Linux ($$UNAME) to me )

$$cat() 类似,mode 参数将 blob、lines、true 和 false 作为值。但是,传统的分词规则 (如empty 和 true 或 false) 略有不同。

如果传递 stsvar,命令的退出状态将存储在该变量中。如果命令崩溃,状态将为 -1,否则为该命令选择的非负退出代码。通常,将状态与零(成功)进行比较就足够了。

请参阅 system() 的测试变体。

1.40. system_path(path)

将 path 中的所有目录分隔符转换为与 system() 函数用于调用命令的 shell 兼容的分隔符。例如,在 Windows shell 中将斜杠转换为反斜杠。

这个函数是在 Qt 5.0 中引入的。

也可参阅 shell_path()

1.41. system_quote(arg)

为 system() 函数使用的 shell 引用 arg。

这个函数是在 Qt 5.0 中引入的。

也可参阅 shell_quote()

1.42. take_first(variablename)

返回 variablename 的第一个值,并将其从源变量中删除。

例如,这为实现队列提供了便利。

这个函数是在 Qt 5.8 中引入的。

也可参阅 take_last(), first().

1.43. take_last(variablename)

返回 variablename 的最后一个值,并将其从源变量中删除。

例如,这为实现堆栈提供了便利。

这个函数是在 Qt 5.8 中引入的。

也可参阅 take_first(), last().

1.44. unique(variablename)

返回 variablename 中删除重复条目的值列表。例如:

ARGS = 1 2 3 2 5 1
ARGS = $$unique(ARGS) #1 2 3 5

1.45. upper(arg1 [, arg2 ..., argn])

接受任意数量的参数并将它们转换为大写。

也可参阅 lower()

1.46. val_escape(variablename)

转义 variablename 的值,使其能够解析为 qmake 代码。

这个函数是在 Qt 5.0 中引入的。

上一篇下一篇

猜你喜欢

热点阅读