2

こんにちはみんなCとGTK+2を使用していますMSプログラムのような単純なペイントプログラムを作りたいのですが、これら2つのツールだけで、始めたばかりで、最後まで手を伸ばしてほしいです:)ここで私のコードを見てください

#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *drawingArea;
    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(G_OBJECT(window), "delete_event",
             G_CALLBACK(gtk_main_quit), G_OBJECT(window));
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit),
             G_OBJECT(window));
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);

    drawingArea = gtk_drawing_area_new();
    /*The problem is in the next line */
    gtk_drawing_area_size(G_OBJECT(drawingArea), 200, 200);

    gtk_container_add(GTK_CONTAINER(window), drawingArea);
    gtk_widget_show(drawingArea);

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

私の問題はコメント欄にあります

gtk_drawing_area_size(G_OBJECT(drawingArea),200,200);

コンパイル時のエラー

ibrahim@ibrahim-PC:~/Desktop$ gcc main.cpp -o base `pkg-config --cflags --libs gtk+-2.0`
main.cpp: In function ‘int main(int, char**)’:
main.cpp:14:52: error: cannot convert ‘GObject* {aka _GObject*}’ to ‘GtkDrawingArea* {aka _GtkDrawingArea*}’ for argument ‘1’ to ‘void gtk_drawing_area_size(GtkDrawingArea*, gint, gint)’

だから私を助けてください

4

1 に答える 1

4

これはGTK+でよくある落とし穴です。メソッドを公開するタイプ(つまり、実装タイプ)にウィジェットをキャストする必要があります。あなたは書くべきです:

gtk_drawing_area_size(GTK_DRAWING_AREA(drawingArea), 200, 200);

それ以外の:

gtk_drawing_area_size(G_OBJECT(drawingArea), 200, 200);

GObjectタイプはgtk_drawing_area_size()メソッドをサポートしていませんが、 GtkDrawingAreaタイプはサポートしているためです。

(実際には、GTK +のオブジェクト指向の性質はCでそのように抽象化されているためgtk_drawing_area_size()、インスタンスの取得をサポートしていないようなものです。)GObject

于 2012-07-13T19:33:41.150 に答える