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 Try Yourself

为 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 Person 的 Label (查看对象 属性 了解如何设置此项)。或者,您可能希望设置对话框自身的标题 (而不是添加标签)。

  9. 为 Line Edit 和 Spin 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. In Conclusion

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

5.3.9. Further Reading

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

5.3.10. What's Next?

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