Linux/Unix C/C++編程 高級篇 Gtkmm-2.4 libGlademm-2.4 (圖)

Linux/Unix C/C++編程 高級篇 Gtkmm-2.4 libGlademm-2.4
    如果說GTK+相當於m$的vc的sdk的話,那麼gtkmm就相當於m$的mfc了,但是其中的用法,原理完全不一樣,相像的僅僅是一個針對C,一個包裝成了C++.
    好,我們現在就開始寫一個最簡單的gtkmm的hello world,閱讀本篇時,須要有前面幾篇的基礎,搭建開發環境,添加include lib,使用pkg-config等等.
    首先,要安裝相關開發工具包,Gtkmm-devel-2.4 libGlademm-devel-2.4,安裝好後用pkg-config檢查路徑是否已經添加
    如圖:1

    然後我們用glade寫一個gui,只含有一個window跟一個button,相關屬性設置如下,工程名:hello
    如圖:2

    如圖:3

    如圖:4

    如圖:5

    建立好的hello.glade
==========hello.glade
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">

<glade-interface>

<widget class="GtkWindow" id="window_hello">
  <property name="visible">True</property>
  <property name="title" translatable="yes">window Hello World!</property>
  <property name="type">GTK_WINDOW_TOPLEVEL</property>
  <property name="window_position">GTK_WIN_POS_NONE</property>
  <property name="modal">False</property>
  <property name="resizable">True</property>
  <property name="destroy_with_parent">False</property>
  <property name="decorated">True</property>
  <property name="skip_taskbar_hint">False</property>
  <property name="skip_pager_hint">False</property>
  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
  <property name="focus_on_map">True</property>
  <property name="urgency_hint">False</property>

  <child>
    <widget class="GtkButton" id="button_hello">
      <property name="visible">True</property>
      <property name="can_focus">True</property>
      <property name="label" translatable="yes">Hello World!</property>
      <property name="use_underline">True</property>
      <property name="relief">GTK_RELIEF_NORMAL</property>
      <property name="focus_on_click">True</property>
    </widget>
  </child>
</widget>

</glade-interface>

====================
    然後新建一個C++工程GtkmmHello,把hello.glade考入src目錄,並且設置開發環境,目錄結構跟環境設置:`pkg-config  --cflags gtkmm-2.4` `pkg-config  --cflags libglademm-2.4`
    如圖:6

    建立一個源文件main.cc
==========main.cc
#include <gtkmm.h>
#include <libglademm.h>

void on_button_hello_clicked()
{
    g_print("Button Hello!/n");
}

int main(int argc, char *argv[])
{
    Gtk::Main kit(argc, argv);

    Glib::RefPtr<Gnome::Glade::Xml> refXml = Gnome::Glade::Xml::create("/root/workspace/GtkmmHello/src/hello.glade");
    // get window
    Gtk::Window* pWindow = NULL;
    pWindow = refXml->get_widget("window_hello", pWindow);
    // get button
    Gtk::Button* pButton = NULL;
    pButton = refXml->get_widget("button_hello", pButton);
    // add signal 注意,這裏不是sigc::mem_fun,官方教程這裏有問題
    pButton->signal_clicked().connect(sigc::ptr_fun(&on_button_hello_clicked));
    Gtk::Main::run(*pWindow);
   
    return(0);
}

====================
    然後保存,運行
    如圖:7

    點擊按鈕,console會打印文字
    如圖:8
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章