属性表单¶
QField创建类似但不同于QGIS的表单。QGIS中的字段控件在尽最大努力的基础上得到支持,并针对移动应用的特点进行了优化。
控件类型 | 支持 | 备注 |
---|---|---|
文本编辑 | - 不支持HTML - 根据类型强制数字输入。 |
|
复选框 | ||
值映射 | ||
隐藏 | ||
附件 | 此字段与相机结合使用。它还可以打开其他文件,如 pdf 和 doc (如果您有合适的查看器) 附件 (相片设置) | |
日期时间 | ||
范围 | ||
关系参照 | ||
关系控件 | ||
值关系 | ||
UUID生成器 | ||
QML / HTML 控件 | ||
其他 | 资助 |
可编辑¶
遵守字段的 可编辑 特性。
记住之前的值¶
QField对最后使用的值提供了细粒度控制,并忽略了QGIS设置。
禁止弹出属性表单¶
设置 禁止弹出属性表单 直接应用于QField表单。
拖放设计器器窗体¶
支持拖放设计器窗体中的组和选项卡。
配置关系控件¶
桌面端筹备工作
有关更多信息,请参阅官方 QGIS 文档 的相关章节。
关系控件在列表中显示所有引用的子要素,可以添加、删除和打开。
通过子图层的 显示表达式 对列表条目进行可视化识别。
键处理¶
由于父主键用作引用子要素上的外键,因此即使在同步回原始数据后,也必须保存这些主键以供使用。因此,我们建议对主键使用UUID等稳定值。
已经可以从即将添加的父级添加子级。如果父级没有有效的主键或违反了约束条件,则这种可能性将被阻止。如果在已经添加了一些子级之后取消添加父要素,也会删除子级。
多对多关系¶
在多对多关系中,根据 QGIS矢量图层属性 中的基数设置,在添加、删除或打开列表中的条目时,会直接影响子图层 (直接基数) 或链接表 (多对一基数)。
当链接表中存在附加关系信息 (例如百分比) 时,通常使用第二种情况。
在多对多关系上存在多对一基数的情况下,需要在链接表设置 显示表达式 。
配置附件控件¶
桌面端筹备工作
控件类型 附件 与存储路径文件的字段一起使用。
可用于:
- 显示和拍摄照片或从图库添加图片
- 收听并录制声音片段
- 显示和录制视频
- 显示指向外部文件 (如PDF或文档) 的链接
路径应设置为相对路径。图片、音频、视频、PDF和文档存储在工程的子目录中,存储在文本字段中的链接指向相应附件。
笔记
音频和视频功能需要 QGIS 3.30 或更高版本
在QField中显示附件。通过单击图标符号,相机或音频记录将开始使用新媒介更新图片、视频或音频。
同步时,还必须复制含有图片、视频、音频、PDF和文档的子目录。
附件控件上的选项 超链接 将禁用相机功能,并启用超链接以打开文档 (pdf, doc, ...)。
配置附件路径¶
桌面端筹备工作
QFieldSync提供了配置附件路径的功能。
- 请转到 QFieldSync插件 > 图层属性
使用表达式指定附件的路径。默认图片保存到 "DCIM" 文件夹,音频记录保存到 "audio" 文件夹,视频保存到以时间戳为名称的 "video" 文件夹。
配置值关系控件¶
桌面端筹备工作
控件 值关系 在组合框中提供关联表的值。可以选择 图层、 键列和 值列。有几个选项可用于更改标准行为: 允许空值、按值排序 和 允许多选 。控件将显示被引用要素的下拉列表或多选列表。
配置条件可见性¶
桌面端筹备工作
可以根据表达式隐藏组。当某些属性仅在特定条件下需要时,这很有用。例如,想象一下映射树。他们中的一些人可能患有某种疾病,您有一个的疾病列表。为了避免表单中出现多个字段,需要创建一个组,并为组 "疾病" 配置可见性表达式。添加带有复选框的字段 "疾病"。只有勾选该复选框时,您才能使用疾病列表。
让我们看看在字段上有什么:
定义约束¶
桌面端筹备工作
属性字段可以附加约束条件。约束是需要计算结果为 True
(或 1
) 才能保存表单的表达式。约束是基于每个字段进行配置的,如果不满足约束,则可以添加说明。
常见用例¶
不能输入高于该地区最高山峰的高程值。
"高程" < 5000
需要填写标识符。
"标识" IS NOT NULL
定义默认值¶
桌面端筹备工作
字段可以配置默认值。数字化新要素时,默认值将插入到属性表单中。它们是可见的,只要字段是可编辑的,就可以修改。它们可以基于几何图形或表达式变量。
其他变量¶
有关在对象属性中存储与位置相关数据的更多信息,请参阅 GNSS文档 。
对于QFieldCloud用户,可以在表达式中使用两个变量,包括属性表单的默认值:
- @cloud_username
返回当前登录的QFieldCloud用户的名称。
- @cloud_useremail
返回当前登录QFieldCloud用户的电子邮箱地址。
常见用例¶
插入位置信息作为变量:
@position_horizontal_accuracy
插入当前日期和时间:
now()
插入数字化线的长度:
length($geometry)
在设备上配置全局变量并插入。
@operator_name
如果要根据插入新要素的位置指定区域代码,可以使用聚合表达式来指定:
aggregate( layer:='regions', aggregate:='max', expression:="code", filter:=intersects( $geometry, geometry( @parent ) ) )
要将从 \@position_coordinate 接收的坐标转换为您的工程坐标系,请执行以下操作:
x(transform(@position_coordinate, 'EPSG:4326', @project_crs ))
y(transform(@position_coordinate, 'EPSG:4326', @project_crs ))
::: {#snapping_results} 如果要在绘制线后使用捕捉结果,可以使用 [\@snapping_results]{.title-ref} 变量。下面的代码提取线的第一个点的捕捉匹配的属性 [id]{.title-ref} 的值。 :::
with_variable(
'first_snapped_point',
array_first( @snapping_results ),
attribute(
get_feature_by_id(
@first_snapped_point['layer'],
@first_snapped_point['feature_id']
),
'id'
)
)
在值关系和关系参照控件中搜索¶
可以使用字段旁边的放大镜在 值关系 或 关系参照 控件中搜索值。
笔记
为相关图层定义 显示表达式 ,该表达式将用于搜索要素。这是在 矢量图层属性 > 显示 中配置的。
配置自动补全值¶
桌面端筹备工作
必须勾选 "使用自动补全" 复选框才能在值关系中使用自动补全功能。
这段视频展示了如何在QField中工作
定义QML控件¶
自定义QML控件可用于将高级操作集成到表单中。在本例中,我们定义了添加一个按钮来打开第三方地图和导航的应用程序。这对于用户而言打开本机设备的应用程序非常有用,例如 Turn-by-Turn 导航。
import QtQuick 2.0
import QtQuick.Controls 2.0
Button {
width: 200
height: width/5
text: "Open in Maps"
onClicked: {
Qt.openUrlExternally(expression.evaluate("'geo:0,0?q=' || $y || ',' || $x"));
}
}
上面的 geo
URI 适用于安卓系统。对于苹果地图,URI可以修改为 'geo:' || $y || ',' || $x
。