【发布时间】:2021-11-19 12:12:29
【问题描述】:
作为this question 的后续/简化,我正在尝试使 GTK3 按钮对象内的文本自动环绕。
所以;
btn = gtk_button_new();
gtk_button_set_label (GTK_BUTTON(btn), "A very long label that should wrap");
不换行 - 按钮只是伸展到适合(此处是不需要的行为)。
但是:
label = gtk_button_get_label(GTK_BUTTON(dbp->btn));
if (GTK_IS_LABEL (label))
{
g_message("Is label");
gtk_label_set_ellipsize(GTK_LABEL(label),PANGO_ELLIPSIZE_END);
gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
gtk_label_set_max_width_chars(GTK_LABEL(label), 14);
}
这会在第一行引发编译错误,鉴于 gtk_button_get_label 返回的是 gchar 字符串而不是实际的标签小部件,您可能会期望出现这种错误。
warning: assignment to ‘GtkWidget *’ {aka ‘struct _GtkWidget *’} from incompatible pointer type ‘const gchar *’ {aka ‘const char *’} [-Wincompatible-pointer-types]
label = gtk_button_get_label(GTK_BUTTON(btn));
所以,看起来我们可以很好地将标签小部件包裹在其他任何地方,但不能包裹按钮标签。任何人都可以填补这块缺失的部分吗?
【问题讨论】:
-
GtkButton是一个容器小部件。您是否尝试过使用gtk_bin_get_child来获取它的标签小部件? -
使用嵌套容器可能会更加复杂。最好递归子小部件并使用 GTK_TYPE_IS_LABEL 宏访问 GtkLabel
标签: c user-interface button gtk gtk3