何以解憂?唯有Java

          其實程序員也懂得浪漫!
          posts - 90, comments - 637, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Linux 下用NetBeans開發GTK 程序

          Posted on 2008-10-19 12:30 guanminglin@gmail.com 閱讀(31895) 評論(10)  編輯  收藏 所屬分類: NetBeans
          用了Linux 突然間想寫點C的程序,大家都說GTK 好用,所以就拿GTK 作實驗。
          第一步:搭建開發環境
          1.gcc和java,這個應該不難,一般的發行版里都有gcc,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
          如果前三項都做完了,那么我們可以開始配置netbeans 了
          1.啟動netbeans ,打開工具->選項->C/C++


          還有需要在項目屬性里添加如下路徑:



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

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

          接著我們就可以寫代碼了,這里我copy了一下網上的代碼:
          #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 的代碼提示:(借用別人的圖片)


          寫完代碼后試著運行項目,你會發現出錯了。解決辦法:
          在項目的屬性C編譯器“命令行->其他選項”選項里添加一行命令行參數

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

          他的意思是把運行gtk 的依賴庫包含進來。

          注意:這兩個 符號:` `  不是我們常用的那個單引號,而是Tab 鍵上面一個鍵的符號。

          最后的結果截圖:


          做完以上工作以后再次運行項目,是不是成功了!
          運行結果:




          順便推薦幾篇blog 給大家

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

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




          評論

          # netbeans用nimbus外觀  回復  更多評論   

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

          # re: Linux 下用NetBeans開發GTK 程序  回復  更多評論   

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

          # re: Linux 下用NetBeans開發GTK 程序  回復  更多評論   

          2008-10-23 10:36 by 小暉
          謝謝,我的是windows 下這個問題,項目里名字的顏色和背景色一樣

          # re: Linux 下用NetBeans開發GTK 程序  回復  更多評論   

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

          # re: Linux 下用NetBeans開發GTK 程序  回復  更多評論   

          2008-10-26 20:41 by 小暉
          6.5 沒有問題,6.1上的問題,謝謝

          # re: Linux 下用NetBeans開發GTK 程序  回復  更多評論   

          2008-11-02 21:57 by sleepsaint
          請問你那張NetBeans 的代碼提示:(借用別人的圖片)是怎么弄出來的,我的Netbeans在不按"."或者"->"的情況下是出不來提示列表的,就因為這點煩死了。按自動完成只能在幾個已經出現過的單詞里面切換。

          # re: Linux 下用NetBeans開發GTK 程序  回復  更多評論   

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

          # re: Linux 下用NetBeans開發GTK 程序  回復  更多評論   

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

          # re: Linux 下用NetBeans開發GTK 程序  回復  更多評論   

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

          # re: Linux 下用NetBeans開發GTK 程序  回復  更多評論   

          2008-11-14 09:36 by 日月雨林@gmail.com
          @fanfan
          更本沒有美化啊!這是netbeans 在Linux 下的默認外觀阿。在不同的Liunx 下會有一些差別。
          其實我更喜歡 metal 的外光,占用資源很小。
          主站蜘蛛池模板: 肥西县| 响水县| 甘孜| 霍山县| 巫山县| 温州市| 交城县| 漯河市| 大宁县| 定陶县| 吉木萨尔县| 门源| 凌海市| 四平市| 南宁市| 寿宁县| 虹口区| 太原市| 科尔| 达州市| 德江县| 五大连池市| 阳谷县| 大石桥市| 惠水县| 正定县| 高州市| 阜康市| 进贤县| 扎囊县| 太原市| 监利县| 卢湾区| 鹤峰县| 朝阳市| 肥西县| 营口市| 定襄县| 金山区| 中阳县| 耿马|