为什么 GTK 在调用 `gtk_entry_set_text` 时(调整窗口大小时)会发出蜂鸣声?

问题描述 投票:0回答:1

我是 xnec2c 的维护者,我们发现此代码导致 xnec2c 在调整窗口大小或旋转对象时通过 PC 扬声器发出蜂鸣声(过度且烦人):

      snprintf( txt, sizeof(txt), "%7.2f", Viewer_Gain(proj_params, calc_data.freq_step) );
      gtk_entry_set_text( GTK_ENTRY(Builder_Get_Object(builder, widget)), txt );

为什么

gtk_entry_set_text
会发出蜂鸣声?

c gtk gtk3
1个回答
0
投票

经过大量故障排除后,

"%7.2f"
创建的文本对于
widget
定义的文本字段来说太长(注意,
widget
是命名小部件的
gchar[]
字符串,而不是小部件对象)。

文本字段的

max-length
是由 Glade XML 定义的,因此每次更新小部件文本时
gtk_entry_set_text
都会触发蜂鸣事件。

如果它对其他人有帮助,这就是解决方法:

-      snprintf( txt, sizeof(txt), "%7.2f", Viewer_Gain(proj_params, calc_data.freq_step) );
+      snprintf( txt, sizeof(txt)-1, "%.2f", Viewer_Gain(proj_params, calc_data.freq_step) );
       gtk_entry_set_text( GTK_ENTRY(Builder_Get_Object(builder, widget)), txt );
...
-        <property name="max-length">6</property>
+        <property name="max-length">9</property>

并且这是解决我们问题的提交(如果您想查看整个事情)。

© www.soinside.com 2019 - 2024. All rights reserved.