2012-07-13 66 views
2

Hello guys我正在使用C和GTK + 2我想制作一个像MS程序这样简单的绘画程序,但是只有这两个工具才行,我刚开始,我希望你的双手达到结尾:) 外观在这里我的代码gtk_drawing_area_size第一个参数

#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); 

错误编译

[email protected]:~/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)’ 
时10

所以请帮帮我

+0

As的文档中提到['gtk_drawing_area_size'](HTTP:/ /developer.gnome.org/gtk/2.24/GtkDrawingArea.html#gtk-drawing-area-size)请考虑使用['gtk_widget_set_size_request'](http://developer.gnome.org/gtk/2.24/GtkWidget.html# GTK的插件 - 组 - 大小 - 请求) – 2012-07-14 17:45:19

回答

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_drawing_area_size()不支持服用GObject情况下,由于的GTK +面向对象性质被抽象中C.那样)