属性表单¶
QField创建类似但不同于QGIS的表单。QGIS中的字段控件在尽最大努力的基础上得到支持,并针对移动应用的特点进行了优化。
控件类型 | 支持 | 备注 |
---|---|---|
文本编辑 | - 不支持HTML - 根据类型强制数字输入。 |
|
复选框 | ||
值映射 | ||
隐藏 | ||
附件 | 此字段与相机结合使用。它还可以打开其他文件,如 pdf 和 doc (如果您有合适的查看器) 附件 (相片设置) | |
日期时间 | ||
范围 | ||
关系参照 | ||
关系控件 | ||
值关系 | ||
UUID生成器 | ||
QML / HTML 控件 | ||
其他 | 资助 |
可编辑¶
遵守字段的 可编辑 特性。
记住之前的值¶
QField对最后使用的值提供了细粒度控制,并忽略了QGIS设置。
禁止弹出属性表单¶
设置 禁止弹出属性表单 直接应用于QField表单。
拖放设计器器窗体¶
支持拖放设计器窗体中的组和选项卡。
In the "Attributes Form," you can structure your forms using various containers, such as tabs and groups, and enhance interactivity by incorporating expression-based conditional visibility. By enabling the Drag and Drop Designer, you gain the flexibility to re-order attribute fields, as well as gaining access to widgets that are not directly tied to specific fields (e.g., HTML/QML widgets).
配置关系控件¶
桌面端筹备工作
有关更多信息,请参阅官方 QGIS 文档 的相关章节。
关系控件在列表中显示所有引用的子要素,可以添加、删除和打开。
通过子图层的 显示表达式 对列表条目进行可视化识别。
键处理¶
由于父主键用作引用子要素上的外键,因此即使在同步回原始数据后,也必须保存这些主键以供使用。因此,我们建议对主键使用UUID等稳定值。
已经可以从即将添加的父级添加子级。如果父级没有有效的主键或违反了约束条件,则这种可能性将被阻止。如果在已经添加了一些子级之后取消添加父要素,也会删除子级。
多对多关系¶
在多对多关系中,根据 QGIS矢量图层属性 中的基数设置,在添加、删除或打开列表中的条目时,会直接影响子图层 (直接基数) 或链接表 (多对一基数)。
当链接表中存在附加关系信息 (例如百分比) 时,通常使用第二种情况。
在多对多关系上存在多对一基数的情况下,需要在链接表设置 显示表达式 。
Item Threshold Configuration for Value Map Editor Widgets¶
To enhance the user experience within QField, it is possible to control the item threshold at which point the value map editor widgets switch to a toggle buttons interface. This feature allows users to quickly access items in QField when there are few and providing a more intuitive interface when dealing with a large number of items.
To Activate Toggle Button Interface¶
-
Open Layer Properties by right-clicking on the desired layer and selecting 'Properties' from the context menu.
-
Navigate to the QField tab located within the Layer Properties dialog.
-
Here, you will find an option to specify the quantity of items that will trigger the transition to a toggle button interface. Enter the preferred threshold value according to your needs.
配置附件控件¶
桌面端筹备工作
控件类型 附件 与存储路径文件的字段一起使用。
可用于:
- 显示和拍摄照片或从图库添加图片
- 收听并录制声音片段
- 显示和录制视频
- 显示指向外部文件 (如PDF或文档) 的链接
路径应设置为相对路径。图片、音频、视频、PDF和文档存储在工程的子目录中,存储在文本字段中的链接指向相应附件。
笔记
音频和视频功能需要 QGIS 3.30 或更高版本
在QField中显示附件。通过单击图标符号,相机或音频记录将开始使用新媒介更新图片、视频或音频。
同步时,还必须复制含有图片、视频、音频、PDF和文档的子目录。
附件控件上的选项 超链接 将禁用相机功能,并启用超链接以打开文档 (pdf, doc, ...)。
配置附件路径¶
桌面端筹备工作
QFieldSync提供了配置附件路径的功能。
- 请转到 QFieldSync插件 > 图层属性
使用表达式指定附件的路径。默认图片保存到 "DCIM" 文件夹,音频记录保存到 "audio" 文件夹,视频保存到以时间戳为名称的 "video" 文件夹。
配置值关系控件¶
桌面端筹备工作
控件 值关系 在组合框中提供关联表的值。可以选择 图层、 键列和 值列。有几个选项可用于更改标准行为: 允许空值、按值排序 和 允许多选 。控件将显示被引用要素的下拉列表或多选列表。
配置条件可见性¶
桌面端筹备工作
可以根据表达式隐藏组。当某些属性仅在特定条件下需要时,这很有用。例如,想象一下映射树。他们中的一些人可能患有某种疾病,您有一个的疾病列表。为了避免表单中出现多个字段,需要创建一个组,并为组 "疾病" 配置可见性表达式。添加带有复选框的字段 "疾病"。只有勾选该复选框时,您才能使用疾病列表。
让我们看看在字段上有什么:
定义约束¶
桌面端筹备工作
属性字段可以附加约束条件。约束是需要计算结果为 True
(或 1
) 才能保存表单的表达式。约束是基于每个字段进行配置的,如果不满足约束,则可以添加说明。
常见用例¶
不能输入高于该地区最高山峰的高程值。
"高程" < 5000
需要填写标识符。
"标识" IS NOT NULL
定义默认值¶
桌面端筹备工作
字段可以配置默认值。数字化新要素时,默认值将插入到属性表单中。它们是可见的,只要字段是可编辑的,就可以修改。它们可以基于几何图形或表达式变量。
When creating expressions for projects intended to be used with QField, it is recommended to use layer names rather than layer IDs. This recommendation stems from the fact that during the project conversion process via QFieldSync, the resulting layers may receive different IDs, which can lead to incorrect expression evaluations. By using layer names, you ensure that expressions are evaluated consistently and accurately across different project states.
其他变量¶
有关在对象属性中存储与位置相关数据的更多信息,请参阅 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
。