5.3. 课: 表单

通过数字化添加新数据时,系统会显示一个对话框,让您填写该要素的属性。然而,默认情况下,这个对话框并不是很友好。这可能会导致易用性的问题,尤其是当您需要创建大型数据集,或者希望其他人帮助您进行数字化,而他们发现默认表单令人困惑。

幸运的是,QGIS允许您为图层创建自定义对话框。这节课将向您演示如何操作。

本课目标: 为图层创建表单。

5.3.1. basic 跟我做: 使用QGIS的表单设计功能

  1. 图层 面板选择 roads 图层

  2. 像以前一样进入 编辑模式

  3. 打开 roads 图层的属性表

  4. 右键单击表格中的任意单元格。将出现一个简略菜单,其中包括 打开表单 条目。

  5. 单击并查看QGIS为该图层生成的表单

很明显,在查看地图时能够这样做会非常好,而不需要一直在 属性表 中搜索特定的街道。

  1. 图层 面板选择 roads 图层

  2. 使用 identify 识别要素 工具,单击地图中的任意街道。

  3. 识别结果 面板随即打开,并显示字段值的树状视图,以及其他有关单击要素的一般信息。

  4. 在面板顶部,勾选 options 识别设置 菜单中的 对于单个要素结果自动打开表单 复选框。

  5. 现在,再次单击地图上的任意街道。随着前面的 识别结果 对话框,您将看到现在熟悉的表单:

    ../../../_images/roads_form.png
  6. 每次使用 识别 工具单击单个要素时,只要勾选 自动打开表单 ,就会弹出其表单。

5.3.2. basic 试一试 使用表单编辑值

如果处于编辑模式,就可以使用此表单编辑要素的属性。

  1. 激活编辑模式 (如果尚未激活)。

  2. 使用 identify 识别要素 工具,单击贯穿 Swellendam 的主要街道:

    ../../../_images/main_street_selected.png
  3. 将其 highway 值编辑为 secondary

  4. 退出编辑模式并保存编辑

  5. 打开 属性表 ,注意属性表和源数据中的值都已更新

5.3.3. moderate 跟我做: 设置表单字段类型

使用表单编辑内容固然很好,但仍然需要手动输入所有内容。幸运的是,表单有不同类型的所谓 控件 ,允许您以各种不同的方式编辑数据。

  1. 打开 roads 图层的 属性...

  2. 切换到 字段 选项卡,您将看到以下内容:

    ../../../_images/fields_panel.png
  3. 切换到 属性表单 选项卡,您将看到以下内容:

    ../../../_images/attributes_form.png
  4. 单击 oneway 行,并在选项列表中选择 复选框 作为 控件类型

    ../../../_images/checkbox_selected.png
  5. 单击 确定

  6. 进入编辑模式 (如果 roads 图层尚未处于编辑模式)

  7. 单击 identify 识别要素 工具

  8. 单击之前选择的同一条主干道

现在,您将看到 oneway 属性旁边有一个复选框,表示 True (选中) 或 False (未选中)。

5.3.4. hard 试一试

highway 字段设置更合适的表单控件。

5.3.5. hard 试一试 创建测试数据

您还可以完全从头开始设计自己的自定义表单。

  1. 创建一个名为 test-data 简单的点图层,该图层有两个属性:

    • name (文本)

    • age (整数)

    ../../../_images/new_point_layer.png
  2. 使用数字化工具在新图层上采集少许点,这样您就有了少量数据可供使用。每次采集新点时,都应显示默认的QGIS生成的属性表单。

    备注

    如果之前的作业启用了捕捉功能,现在可能需要禁用。

    ../../../_images/new_point_entry.png

5.3.6. hard 跟我做: 创建新表单

现在,我们想为属性数据采集阶段创建自己的自定义表单。为此,您需要安装 QT Designer (仅创建表单的人员需要)。

  1. 启动 QT Designer

  2. 在出现的对话框中,创建一个新对话框:

    ../../../_images/qt_new_dialog.png
  3. 在屏幕 (默认) 左侧查找 Widget Box ,它含有一个名为 Line Edit 的项。

  4. 单击并将此项拖到表单,这将在表单中创建一个新的 Line Edit

  5. 选中新 Line Edit 元素后,您将在屏幕一侧 (默认位于右侧) 看到其属性:

    ../../../_images/qt_line_edit.png
  6. 将其名称设置为 name

  7. 使用相同的方法,创建一个新的 Spin Box 并其名称设置为 age

  8. 添加带有粗体文本 Add a New PersonLabel (查看对象 属性 了解如何设置此项)。或者,您可能希望设置对话框自身的标题 (而不是添加标签)。

  9. Line EditSpin Box 添加 Label

  10. 根据自己的想法排列元素。

  11. 单击对话框中的任意位置。

  12. Find the Lay Out in a Form Layout button (in a toolbar along the top edge of the screen, by default). This lays out your dialog automatically.

  13. 将对话框的最大尺寸 (在其属性中) 设置为 200 (宽度) 乘以 150 (高度)。

  14. 您的表单现在应该类似于以下所示:

    ../../../_images/qt_example_form.png
  15. 将新表单另存为 exercise_data/forms/add_people.ui

  16. 保存完成后,可以关闭 Qt Designer

5.3.7. hard 跟我做: 将表单与图层关联

  1. 返回到QGIS

  2. 双击图例中的 test-data 图层以访问其属性。

  3. 单击 图层属性 对话框中的 属性表单 选项卡

  4. 选择属性布局编辑器 下拉列表中,选择 提供界面文件 选项。

  5. 单击省略号按钮,然后选择刚才创建的 add_people.ui 文件:

    ../../../_images/provide_ui_file.png
  6. 图层属性 对话框中单击 确定

  7. 进入编辑模式并采集新点

  8. 执行此操作时,您会看到自定义对话框 (而不是QGIS通常创建的通用对话框)。

  9. 如果使用 identify 识别要素 工具单击其中一个点,现在可以通过在识别结果窗口中右键单击并从上下文菜单中选择 查看要素表单 来打开表单。

  10. 如果处于该图层的编辑模式,则此上下文菜单将显示 编辑要素表单 ,即使在初始采集之后,您也可以调整新表单中的属性。

5.3.8. 综上所述

使用表单,您可以在编辑或创建数据时让自己的生活更轻松。通过编辑控件类型或从头创建一个全新的表单,您可以控制为该图层数字化新数据的用户体验,从而最大限度地减少误解和不必要的错误。

5.3.9. 延伸阅读

如果您已经完成了上面的高级章节,并且了解Python,那么您可能想看看有关使用Python逻辑创建自定义要素表单的 博客文章 ,它允许使用高级功能,包括数据验证、自动补全等。

5.3.10. 下节引言

在识别要素时打开表单是QGIS可以执行的标准动作之一。但是,也可以指示它执行您定义的自定义动作。这是下一课的主题。