将组件连接到信号
通过信号和处理机制,组件可以对应用程序事件(由信号表示)做出响应。当信号发出时,相应的信号处理程序会被调用,通过使用脚本或处理程序中的其他操作来响应事件。
要在特定组件发出特定信号时接收通知,组件定义应声明一个名为on<Signal>的信号处理程序,其中<Signal>是信号的名称,第一个字母大写。信号处理程序应包含调用信号处理程序时要执行的 JavaScript 代码。
组件有预定义的信号,当用户与应用程序交互时会发出这些信号。例如,鼠标区域组件有一个clicked 信号,当鼠标在区域内点击时就会发出该信号。由于信号名称为clicked ,因此接收该信号的信号处理器名为onClicked 。
当属性值发生变化时,会自动发出一个信号。这种类型的信号是属性变化信号,这些信号的信号处理程序的写法是on<Property>Changed ,其中<Property>是属性的名称,第一个字母大写。
例如,鼠标区域组件有一个pressed 属性。要在该属性发生变化时接收通知,可以使用名为onPressedChanged 的信号处理器。
有关信号和信号处理程序的更多信息,请参阅信号和处理程序事件系统。
创建连接
您可以使用上下文菜单将所选组件连接到连接到操作的信号上:
- 在Navigator 或2D 视图中选择要连接的组件。
- 在上下文菜单中,选择Connections >Add New Connection ,然后选择一个可用的信号、动作和动作属性。
添加连接
您也可以在Connections 视图的Connections 选项卡中添加连接。
要将组件连接到其可用的信号,请执行以下操作
- 在Navigator 或2D 视图中选择要连接的组件。
- 转到Connections 视图中的Connections 选项卡。

- 选择
(Add) 在连接编辑器中创建连接。
将信号连接到操作
将信号连接到操作:
- 选择或创建连接以打开连接编辑器。

连接编辑器。
- 在Target 中,选择一个组件。
- 在Signal 中,选择要发射的信号。
- 在Action 中,选择信号发出时要应用的操作。
连接的属性取决于所选的操作:
- Call Function 设置要调用的函数。
- Assign 设置源属性和目标属性。
- Change State 设置状态组中的目标状态。
- Set Property 设置组件属性
- Print Message 设置要显示的文本。
添加条件
使用连接编辑器为带条件的动作创建 JavaScript 表达式。动作将一个组件连接到一个信号,而条件则从其他组件获取属性值并相互比较。然后,您就可以使用 JavaScript 表达式来更改组件。
选择Add Condition ,为选定的操作添加逻辑。

要包含else 语句,请选择Add Else Statement 。
要使用复杂的条件语句,请
- 选择{} ,打开Action Editor 。
- 输入 JavaScript 语句。
- 关闭对话框以应用更改。
有关可用于构建条件表达式的逻辑运算符的更多信息,请参阅逻辑运算符摘要。
创建 JavaScript 表达式
要在连接编辑器中为操作创建 JavaScript 表达式,请执行以下操作
- 将组件信号连接到操作。

- 选择{} 打开Action Editor 视图,使用组件和逻辑表达式编写 JavaScript 表达式。

注意: 在连接编辑器中,只能创建单层if-else表达式。要创建嵌套表达式,请选择{} 。
跳转到代码
要跳转到Code 视图中的代码,请在连接编辑器中选择
(Jump to the code)。
删除连接
要删除连接,请在Connections 中选择该连接,然后选择
(Remove)。
观看实际连接
观看此视频,了解Connection 视图工作流程的实际示例:
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.