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
如果說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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.