如何使用自动换行模式在gtk中获取自动调整大小的标签?

时间:2018-10-23 13:35:41

标签: c gtk2

所以我在Gtk2中需要一个标签,该标签将显示所有文本并在需要时用换行符将其拆分。标准包装模式。这应该在两种情况下起作用:首先,当我更改标签中的文本时,以及标签的父窗口小部件被调整大小时。正如Gtk2文档所说

  

请注意,将换行设置为TRUE不会使标签换行   保留其父容器的宽度,因为GTK +小部件在概念上   不能根据父容器的大小进行申请。   对于缠绕在特定位置的标签,请设置标签的宽度   使用gtk_widget_set_size_request()。

因此,我尝试使用gtk_widget_set_size_request解决方法,但是存在问题。当我尝试快速缩小窗口时,窗口没有缩小。那么如何解决这个缩小的问题呢?我的代码:

#include <gtk/gtk.h>

static void cb_allocate(GtkWidget *label, GtkAllocation *allocation, gpointer data)
{
    gtk_widget_set_size_request(label, allocation->width - 34, -1);
}

int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *label;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

    label = gtk_label_new(
                "One long line of text that will almost definitely wrap once, if not twice."
                "One long line of text that will almost definitely wrap once, if not twice."
                "One long line of text that will almost definitely wrap once, if not twice.");

    gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
    g_signal_connect(G_OBJECT(label), "size-allocate", G_CALLBACK(cb_allocate), NULL);

    gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(label));

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}

如果我将在gtk_widget_set_size_request中设置较大的宽度值,似乎可以部分解决我的问题。但这不是很好。

0 个答案:

没有答案