c – 通过代码触发回调时抑制GTK信号
要旨:
handler_block在逐个案例的基础上很有用,但我宁愿在程序开头调用一些东西来抑制对gtk_entry_set_text和gtk_toggle_button_set_active的所有调用的信号.有办法吗? 背景资料: 我的程序用于通过具有以下属性的角色创建者对话框创建实体: 名称 – 通过GTKComboBoxes从预定列表中选择 可以添加实体 – 一个以空白的添加对话框开头,填写所有字段并提交. 我有一个连接到Type条目的回调,并由“已更改”信号触发.每当我在代码中手动设置条目文本以显示正在编辑的实体时,回调似乎会触发: gtk_entry_set_text(GTK_ENTRY(name_entry),entity.name); // name is a char* gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (group_button_friendly),TRUE); 是的,g_signal_handler_block有一种方法,但这需要 1)获取首先连接信号时创建的gulong. 2)对每个呼叫使用阻塞/解除阻塞习语. 解决方法
我认为你要找的是g_signal_handlers_block_matched.如果你使用信号中使用的闭包将掩码设置为G_SIGNAL_MATCH_CLOSURE,它应该可以解决问题.
您必须查找signal_id以查找正在发出的信号,但您只需要执行一次,因为所有小部件之间的信号ID是相同的,这也是调用中也需要该实例的原因. 要取消阻止,您要使用g_signal_handlers_unblock_matched. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |