Как получить метку авторазмера в gtk с режимом обтекания? - PullRequest
0 голосов
/ 23 октября 2018

Так что мне нужен ярлык в 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.Но это не очень хорошо.

...