Мне трудно использовать GTK для рисования текста - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь набрать этот код для отображения текста на экране, но при компиляции и открытии скомпилированного приложения текст отсутствует.Почему не работает эта работа?Я использую C и Linux, и я пытаюсь использовать заголовочные файлы gtk.Что я делаю не так?

#include <stdlib.h>
#include <gtk/gtk.h>

static void helloWorld (GtkWidget *wid, GtkWidget *win) {
    GtkWidget *dialog = NULL;

    dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "Hello World! My name is ****");
    gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
    gtk_dialog_run (GTK_DIALOG (dialog));
    gtk_widget_destroy (dialog);
}

int main (int argc, char *argv[]) {
    GtkWidget *button = NULL;
    GtkWidget *win = NULL;  
    GtkWidget *vbox = NULL;

    /* Initialize GTK+ */
    g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
    gtk_init (&argc, &argv);
    g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);

    /* Create the main window */
    win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW (win), 400, 300);
    gtk_container_set_border_width (GTK_CONTAINER (win), 8);
    gtk_window_set_title (GTK_WINDOW (win), "The stupid GTK test");
    gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
    gtk_widget_realize (win);
    g_signal_connect (win, "destroy", gtk_main_quit, NULL);

    /* Create a vertical box with buttons*/

    vbox = gtk_vbox_new (TRUE, 6);
    gtk_container_add (GTK_CONTAINER (win), vbox);

    button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win);
    gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

    button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
    g_signal_connect (button, "clicked", gtk_main_quit, NULL);
    gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

    GtkWidget *view;
    GtkTextBuffer *buffer;
    GtkTextIter start, end;
    PangoFontDescription *font_desc;
    GdkColor color;
    GtkTextTag *tag;

    view = gtk_text_view_new ();

    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));

    gtk_text_buffer_set_text (buffer, "Hello, this is some text", -1);

    /* Change default font throughout the widget */
    font_desc = pango_font_description_from_string ("Serif 15");
    gtk_widget_modify_font (view, font_desc);
    pango_font_description_free (font_desc);

    /* Change default color throughout the widget */
    gdk_color_parse ("green", &color);
    gtk_widget_modify_text (view, GTK_STATE_NORMAL, &color);

    /* Change left margin throughout the widget */
    gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 30);

    /* Use a tag to change the color for just one part of the widget */
    tag = gtk_text_buffer_create_tag (buffer, "blue_foreground",
                            "foreground", "blue", NULL);  
    gtk_text_buffer_get_iter_at_offset (buffer, &start, 7);
    gtk_text_buffer_get_iter_at_offset (buffer, &end, 12);
    gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
    /*Enter the main loop */
    gtk_widget_show_all (win);
    gtk_main ();
    return 0;
}

Как мне сделать эту работу?Я хочу, чтобы он отображал текст при компиляции, а затем открывал.Я попробовал несколько вещей, и ни одна из них не сработала.

1 Ответ

0 голосов
/ 01 февраля 2019

Вы забыли добавить текстовое поле в какое-то место в окне, где оно будет фактически отображаться, например

    gtk_box_pack_start (GTK_BOX (vbox), view, TRUE, TRUE, 0);

(должно быть после определения view и перед вызовом show_all).Если вы посмотрите на свой код, то увидите, что этот вызов сделан для всех остальных виджетов, которые появляются.Ваша проблема на самом деле не относится только к рисованию текста.

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