<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    何以解憂?唯有Java

    其實(shí)程序員也懂得浪漫!
    posts - 90, comments - 637, trackbacks - 0, articles - 2
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Linux 下用NetBeans開發(fā)GTK 程序

    Posted on 2008-10-19 12:30 guanminglin@gmail.com 閱讀(31889) 評(píng)論(10)  編輯  收藏 所屬分類: NetBeans
    用了Linux 突然間想寫點(diǎn)C的程序,大家都說(shuō)GTK 好用,所以就拿GTK 作實(shí)驗(yàn)。
    第一步:搭建開發(fā)環(huán)境
    1.gcc和java,這個(gè)應(yīng)該不難,一般的發(fā)行版里都有g(shù)cc,Java可以到www.sun.com下載,安裝配置,google 一下到處都是。
    2.到www.netbeans.org 下載netbeans IDE ,有專門的C++ 版。
    3.Gtk+可以直接安裝libgtk2.0-dev軟件包,也可以從http://www.gtk.org/下載源碼,編譯安裝。可能需要其他依賴的軟件包如下:
    • pkg-config
    • GNU make
    • JPEG, PNG and TIFF image libraries
    • FreeType
    • fontconfig
    • GNU libiconv library
    • GNU gettext
    • GLib
    • Pango
    • ATK
    • GTK+
    第二步:配置NetBeans
    如果前三項(xiàng)都做完了,那么我們可以開始配置netbeans 了
    1.啟動(dòng)netbeans ,打開工具->選項(xiàng)->C/C++


    還有需要在項(xiàng)目屬性里添加如下路徑:



    在代碼輔助里面添加GTK2.0的頭文件位置:/usr/include/gtk-2.0
    這是為了寫代碼的時(shí)候方便提示例如:

    在沒(méi)有添加之前需要這樣寫:
    #include<gtk-2.0/gtk/gtk.h>
    添加之后就可以這樣寫:
    #include<gtk/gtk.h>

    接著我們就可以寫代碼了,這里我copy了一下網(wǎng)上的代碼:
    #include<gtk/gtk.h>
    /* This is a callback function. The data arguments are ignored
     * in this example. More on callbacks below. 
    */
    static void hello( GtkWidget *widget,
                       gpointer   data )
    {
        g_print (
    "Hello World\n");
    }

    static gboolean delete_event( GtkWidget *widget,
                                  GdkEvent  
    *event,
                                  gpointer   data )
    {
        
    /* If you return FALSE in the "delete_event" signal handler,
         * GTK will emit the "destroy" signal. Returning TRUE means
         * you don't want the window to be destroyed.
         * This is useful for popping up 'are you sure you want to quit?'
         * type dialogs. 
    */

        g_print (
    "delete event occurred\n");

        
    /* Change TRUE to FALSE and the main window will be destroyed with
         * a "delete_event". 
    */

        
    return TRUE;
    }

    /* Another callback */
    static void destroy( GtkWidget *widget,
                         gpointer   data )
    {
        gtk_main_quit ();
    }

    int main( int   argc,
              
    char *argv[] )
    {
        
    /* GtkWidget is the storage type for widgets */
        GtkWidget 
    *window;
        GtkWidget 
    *button;
        
        
    /* This is called in all GTK applications. Arguments are parsed
         * from the command line and are returned to the application. 
    */
        gtk_init (
    &argc, &argv);
        
        
    /* create a new window */
        window 
    = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        
        
    /* When the window is given the "delete_event" signal (this is given
         * by the window manager, usually by the "close" option, or on the
         * titlebar), we ask it to call the delete_event () function
         * as defined above. The data passed to the callback
         * function is NULL and is ignored in the callback function. 
    */
        g_signal_connect (G_OBJECT (window), 
    "delete_event",
                  G_CALLBACK (delete_event), NULL);
        
        
    /* Here we connect the "destroy" event to a signal handler.  
         * This event occurs when we call gtk_widget_destroy() on the window,
         * or if we return FALSE in the "delete_event" callback. 
    */
        g_signal_connect (G_OBJECT (window), 
    "destroy",
                  G_CALLBACK (destroy), NULL);
        
        
    /* Sets the border width of the window. */
        gtk_container_set_border_width (GTK_CONTAINER (window), 
    50);
        
        
    /* Creates a new button with the label "Hello World". */
        button 
    = gtk_button_new_with_label ("Hello World");
        
        
    /* When the button receives the "clicked" signal, it will call the
         * function hello() passing it NULL as its argument.  The hello()
         * function is defined above. 
    */
        g_signal_connect (G_OBJECT (button), 
    "clicked",
                  G_CALLBACK (hello), NULL);
        
        
    /* This will cause the window to be destroyed by calling
         * gtk_widget_destroy(window) when "clicked".  Again, the destroy
         * signal could come from here, or the window manager. 
    */
        g_signal_connect_swapped (G_OBJECT (button), 
    "clicked",
                      G_CALLBACK (gtk_widget_destroy),
                                  G_OBJECT (window));
        
        
    /* This packs the button into the window (a gtk container). */
        gtk_container_add (GTK_CONTAINER (window), button);
        
        
    /* The final step is to display this newly created widget. */
        gtk_widget_show (button);
        
        
    /* and the window */
        gtk_widget_show (window);
        
        
    /* All GTK applications must have a gtk_main(). Control ends here
         * and waits for an event to occur (like a key press or
         * mouse event). 
    */
        gtk_main ();
         
    return 0;
    }


    NetBeans 的代碼提示:(借用別人的圖片)


    寫完代碼后試著運(yùn)行項(xiàng)目,你會(huì)發(fā)現(xiàn)出錯(cuò)了。解決辦法:
    在項(xiàng)目的屬性C編譯器“命令行->其他選項(xiàng)”選項(xiàng)里添加一行命令行參數(shù)

     `pkg-config gtk+-2.0 --cflags --libs`

    他的意思是把運(yùn)行g(shù)tk 的依賴庫(kù)包含進(jìn)來(lái)。

    注意:這兩個(gè) 符號(hào):` `  不是我們常用的那個(gè)單引號(hào),而是Tab 鍵上面一個(gè)鍵的符號(hào)。

    最后的結(jié)果截圖:


    做完以上工作以后再次運(yùn)行項(xiàng)目,是不是成功了!
    運(yùn)行結(jié)果:




    順便推薦幾篇blog 給大家

    http://blog.chinaunix.net/u1/48222/showart_393772.html

    強(qiáng)烈推薦這篇博客,雖然他是英文的
    http://zetcode.com/articles/netbeanscdevelopment/




    評(píng)論

    # netbeans用nimbus外觀  回復(fù)  更多評(píng)論   

    2008-10-22 19:43 by 小暉
    改了之后,一切都正常,但是,項(xiàng)目,文件,服務(wù) 里面的各個(gè)項(xiàng)目的名字的默認(rèn)顏色都變成了白色,和背景色一樣,都看不見了,請(qǐng)問(wèn)一下有辦法解決嗎??

    # re: Linux 下用NetBeans開發(fā)GTK 程序  回復(fù)  更多評(píng)論   

    2008-10-22 20:09 by 日月雨林@gmail.com
    @小暉
    這個(gè)我也沒(méi)有辦法,這個(gè)可能是nimbus 在linux 下的bug ,在windows 下就很正常。不建議你在linux 下使用nimbus 外觀。用gtk 的外觀比較好。

    # re: Linux 下用NetBeans開發(fā)GTK 程序  回復(fù)  更多評(píng)論   

    2008-10-23 10:36 by 小暉
    謝謝,我的是windows 下這個(gè)問(wèn)題,項(xiàng)目里名字的顏色和背景色一樣

    # re: Linux 下用NetBeans開發(fā)GTK 程序  回復(fù)  更多評(píng)論   

    2008-10-23 18:17 by 日月雨林@gmail.com
    @小暉
    我的好像沒(méi)有這個(gè)問(wèn)題?我回去在看看!我一般都是用他的默認(rèn)外觀!

    # re: Linux 下用NetBeans開發(fā)GTK 程序  回復(fù)  更多評(píng)論   

    2008-10-26 20:41 by 小暉
    6.5 沒(méi)有問(wèn)題,6.1上的問(wèn)題,謝謝

    # re: Linux 下用NetBeans開發(fā)GTK 程序  回復(fù)  更多評(píng)論   

    2008-11-02 21:57 by sleepsaint
    請(qǐng)問(wèn)你那張NetBeans 的代碼提示:(借用別人的圖片)是怎么弄出來(lái)的,我的Netbeans在不按"."或者"->"的情況下是出不來(lái)提示列表的,就因?yàn)檫@點(diǎn)煩死了。按自動(dòng)完成只能在幾個(gè)已經(jīng)出現(xiàn)過(guò)的單詞里面切換。

    # re: Linux 下用NetBeans開發(fā)GTK 程序  回復(fù)  更多評(píng)論   

    2008-11-02 22:12 by sleepsaint
    被eclipse類似晃點(diǎn)了,我改了快捷鍵為eclipse類似,然后按Alt+/,然后就只能在幾個(gè)詞之間切換。又看了一下快捷鍵映射,自動(dòng)完成還是ctrl+space,Alt+/是下一個(gè)匹配詞,狂暈,被晃點(diǎn)了這么久。

    # re: Linux 下用NetBeans開發(fā)GTK 程序  回復(fù)  更多評(píng)論   

    2008-11-02 22:13 by 日月雨林@gmail.com
    @sleepsaint
    你可以試一試 CTRL+\ 快捷鍵!或者 CTRL + Space 鍵(這個(gè)快捷鍵基本上都被輸入法占用了)

    # re: Linux 下用NetBeans開發(fā)GTK 程序  回復(fù)  更多評(píng)論   

    2008-11-14 09:14 by fanfan
    界面美化的很難看啊

    # re: Linux 下用NetBeans開發(fā)GTK 程序  回復(fù)  更多評(píng)論   

    2008-11-14 09:36 by 日月雨林@gmail.com
    @fanfan
    更本沒(méi)有美化啊!這是netbeans 在Linux 下的默認(rèn)外觀阿。在不同的Liunx 下會(huì)有一些差別。
    其實(shí)我更喜歡 metal 的外光,占用資源很小。
    主站蜘蛛池模板: 日韩av无码久久精品免费| 亚洲欧美日韩久久精品| 国产福利电影一区二区三区,免费久久久久久久精 | 日韩在线视频免费| 国产在线观看免费不卡| 亚洲欧美成aⅴ人在线观看| 夜夜嘿视频免费看| 最新亚洲人成无码网www电影| 国产精品久久免费视频| 国产精品观看在线亚洲人成网| 日本免费一区二区三区最新| 美女扒开尿口给男人爽免费视频| 亚洲不卡AV影片在线播放| 亚洲免费日韩无码系列| 亚洲av永久无码精品表情包| 一级毛片成人免费看免费不卡| 亚洲精品国产免费| 成人免费在线视频| 男女交性无遮挡免费视频| 亚洲开心婷婷中文字幕| 日本免费一区二区三区四区五六区 | 免费播放一区二区三区| 亚洲91精品麻豆国产系列在线| 成人免费视频软件网站| 免费在线人人电影网| 久久久综合亚洲色一区二区三区| 国内精品99亚洲免费高清| 免费国产污网站在线观看| 久久久久亚洲av无码专区导航| 在线视频观看免费视频18| 亚洲精品国产精品| 国产亚洲一区区二区在线| 无码中文字幕av免费放dvd| 国产亚洲精品影视在线| 国产精品亚洲mnbav网站| 免费人成视频在线观看网站| 亚洲AV无码一区二区三区网址| 国内精品99亚洲免费高清| 国产高清不卡免费在线| 特黄特色的大片观看免费视频| 亚洲欧洲日产国码久在线观看|