Как выровнять ярлык GtkWidget в центре его макета GtkWidget в C с GTK3? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть следующий код, и я изо всех сил пытаюсь выровнять метку по центру его родителя (макет), но у меня ничего не получилось:

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

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 1024, 600);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

    layout = gtk_layout_new(NULL, NULL);
    gtk_container_add(GTK_CONTAINER (window), layout);

    label = gtk_label_new(NULL);
    gtk_label_set_text(GTK_LABEL(label), "SOME TEXT");
    gtk_layout_put(GTK_LAYOUT(layout), label, 0, 0);

    // Here I'm trying to align my label to the center,
    // but it doesn't work with any of the three functions
    gtk_widget_set_halign(label, GTK_ALIGN_CENTER);
    //gtk_label_set_xalign(GTK_LABEL(label), GTK_ALIGN_CENTER);
    //gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);




    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}

Я также попробовал некоторые другиефункции, которые я мог бы найти в документации GENOME и другие вопросы SO, но они в основном устарели или тоже не работают.На данный момент, когда я работаю с GTK3, рекомендуемый способ выглядит следующим образом:

gtk_widget_set_halign (label, GTK_ALIGN_CENTER);

Но это не работает,Метка все еще находится в той позиции, с которой я ее поставил:

gtk_layout_put (GTK_LAYOUT (layout), label, 512, 300);

Код компилируется без ошибокили предупреждения.

1 Ответ

0 голосов
/ 08 марта 2019

GtkLayout, как и его относительный GtkFixed, является видом последнего средства, которое вы используете, когда ни один из других контейнеров не будет работать для вашей цели.Он просто помещает виджеты туда, где вы их указываете.Таким образом, API горизонтального выравнивания не будут работать.С GtkLayout вы должны рассчитать выравнивание самостоятельно.

Я бы порекомендовал использовать GtkGrid или один из других, более полнофункциональных контейнеров.

...