Заставить GtkScrolledWindow отображать все дочерние по умолчанию - PullRequest
1 голос
/ 14 января 2009

Как мне инициализировать GtkScrolledWindow , чтобы избежать увеличения полос прокрутки до максимально возможного увеличения?

По умолчанию он выглядит как можно меньше.

Демо-код (Выйти с SIGINT):

#include <gtk/gtk.h>

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

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    sw = gtk_scrolled_window_new(NULL, NULL);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
            GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
    gtk_container_add(GTK_CONTAINER(window), sw);
    gtk_widget_show(sw);

    content = gtk_button_new_with_label("This is a very, very"
            "very very very very very very very very long text");
    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), content);
    gtk_widget_show(content);

    gtk_widget_show(window);
    gtk_main();

    return 0;
}

Ответы [ 2 ]

1 голос
/ 03 марта 2009

Я думаю, что это работает и не является безобразным хаком (много):

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

    GtkRequisition size;
    GtkWidget* viewport;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    sw = gtk_scrolled_window_new(NULL, NULL);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
            GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
    gtk_container_add(GTK_CONTAINER(window), sw);
    gtk_widget_show(sw);

    content = gtk_button_new_with_label("This is a very, very"
            "very very very very very very very very long text");
    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), content);
    gtk_widget_show(content);

    gtk_widget_show(window);

    viewport = gtk_widget_get_ancestor(content, GTK_TYPE_VIEWPORT);
    gtk_widget_size_request(viewport, &size);
    gtk_widget_set_size_request(sw, size.width, size.height);

    gtk_main();

    return 0;
}
0 голосов
/ 15 января 2009

Я не уверен, что правильный способ сделать это, но я обнаружил, что для меня лучше всего установить размер окна, а содержащиеся в нем виджеты обычно имеют правильный размер:

gtk_window_set_default_size(GTK_WINDOW(window), 1000, 500);

Кроме того, вы можете установить размер окна GtkScrolledWindow:

gtk_widget_set_size_request(window, 500, 250);

Обратите внимание, что, особенно в этом последнем случае, при расчете размера в пикселях, вероятно, необходимо учитывать локализацию, размеры шрифта и другие подобные детали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...