亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 電腦知識 > 正文

Linux下從頭再走GTK+-3.0(六)

2024-05-08 15:56:03
字體:
來源:轉載
供稿:網友

  在 GTK3 中增加了一個 GtkApplicaton 類,便于我們處理多窗口程序,同時有了 Gtkapplication 我們也更容易創建靈活,易用,界面美觀的應用程序。

在前面的幾個例子中,演示了如何利用 GtkApplication 直接創建單個窗口,并知道了在哪里設計我們的 UI 。以及簡單嘗試了 GtkBuilder 。

接下來,我們走進 GtkApplication 。采用面向對象的設計方式設計我們的應用。

我們想要封裝一個 MyApp 和 MyAppWindow , 它繼承了 GtkApplcation 和 GtkApplicationWindow。

首先需要創建如下幾個文件:

main.c : 主函數在此文件。

myapp.c mypp.h : 封裝的 MyApp

myappwindow.c myappwindow.h : 封裝的 MyAppWindow

 

  采用這樣的設計方式,主函數里面只需要一句話,main.c 內容如下:

#include <gtk/gtk.h>#include "myapp.h"int main(int argc , char *argv[]){    //my_app_new() 是我們封裝好的,創建一個 MyApp 的接口    return g_application_run ( G_APPLICATION ( my_app_new() ) , argc , argv );}

  接下來是 myapp.c

#include <gtk/gtk.h>#include "myapp.h"#include "myappwindow.h"      //使用到我們封裝的 MyAppWindow 提供的接口//利用C語言結構,創建 MyApp 類型, 其父類型為 GtkApplicationstruct _MyApp{    GtkApplication parent;};//同樣定義 MyAppClass 類struct _MyAppClass{    GtkApplicationClass parent_class;};//利用G_DEFINE_TYPE 宏,注冊定義 MyApp 類型 , 對應參數分別代表:類型名 , 小寫類型名(用下劃線分隔) , 父類型G_DEFINE_TYPE ( MyApp , my_app , GTK_TYPE_APPLICATION );//my_app初始化函數原型static void my_app_init (MyApp *app){}//my_app activate 信號原型 , 相當于之前幾節我們手動鏈接的 activate 函數static void my_app_activate (GApplication *app){    MyAppWindow *win;    //因此在這里面創建窗口,用我們封裝好的 MyAppWindow    win = my_app_window_new ( MY_APP(app) );    //將窗口放在前臺 , 自動調用 gtk_widget_show_all()    gtk_window_PResent (GTK_WINDOW(win));}//處理命令行參數的函數原型 static void my_app_open (GApplication *app ,                          GFile       **files ,                         gint          n_files ,                          const gchar  *hint){    GList *windows;    MyAppWindow *win;    int i;    windows = gtk_application_get_windows ( GTK_APPLICATION(app) );    if(windows)        win = MY_APP_WINDOW( windows->data );    else        win = my_app_window_new ( MY_APP(app) );    for(i = 0; i < n_files; i++)        my_app_window_open ( win , files[i] );    gtk_window_present ( GTK_WINDOW(win) );}//MyApp 類的初始化函數,在這里面即可復寫MyApp類繼承GtkAppliation類的默認信號處理函數。static void my_app_class_init ( MyAppClass *class){    //將activate信號和open信號處理函數改為我們寫的    G_APPLICATION_CLASS (class) ->activate = my_app_activate;    G_APPLICATION_CLASS (class) ->open     = my_app_open;}//這是向外提供的接口,不用加 static 修飾。 MyApp *my_app_new (void){    //按照我們創建的類型創建一個 MyApp    return g_object_new ( MY_APP_TYPE ,                           "application-id" ,                          "org.gtk.myapp" ,                           "flags" ,                           G_APPLICATION_HANDLES_OPEN ,                           NULL);}

  myapp.h 內容如下:

#ifndef _My_App_H#define _My_App_H#include <gtk/gtk.h>//my_app_get_type() 這些函數,我們雖然沒寫,但是在注冊定義 MyApp 類型的時候根據填寫的 my_app 會自動生成。#define MY_APP_TYPE ( my_app_get_type () )#define MY_APP(obj) ( G_TYPE_CHECK_INSTANCE_CAST( (obj) , MY_APP_TYPE , MyApp) )typedef struct _MyApp       MyApp;typedef struct _MyAppClass  MyAppClass;//在 myapp.c 中的其他函數屬于私有,暫時不需要向外提供。GType  my_app_get_type  (void);MyApp *my_app_new       (void);#endif // _My_App_

  下面封裝MyAppWindow類型的方式和上面一樣,如下是 myappwindow.c

#include <gtk/gtk.h>#include "myapp.h"#include "myappwindow.h"struct _MyAppWindow{    GtkApplicationWindow parent;};struct _MyAppWindowClass{    GtkApplicationWindowClass parent_class;};G_DEFINE_TYPE ( MyAppWindow , my_app_window , GTK_TYPE_APPLICATION_WINDOW);static void my_app_window_init ( MyAppWindow *app){}static void my_app_window_class_init ( MyAppWindowClass *class){    }MyAppWindow *my_app_window_new (MyApp *app){    return g_object_new ( MY_APP_WINDOW_TYPE ,                           "application" ,                           app ,                           NULL);    }void my_app_window_open ( MyAppWindow *win , GFile *file){}

  以及 myappwindow.h

#ifndef _My_App_Window_H#define _My_App_Window_H#include <gtk/gtk.h>#include "myapp.h"#define MY_APP_WINDOW_TYPE   (my_app_window_get_type())#define MY_APP_WINDOW(obj)   (G_TYPE_CHECK_INSTANCE_CAST( (obj) , MY_APP_WINDOW_TYPE , MyAppWindow) )typedef struct _MyAppWindow            MyAppWindow;typedef struct _MyAppWindowClass       MyAppWindowClass;GType          my_app_window_get_type   (void);MyAppWindow   *my_app_window_new        (MyApp *app);void           my_app_window_open       (MyAppWindow *win , GFile *file);#endif //_My_App_Window_

  編譯并運行:

gcc main.c myapp.c myappwindow.c  `pkg-config --cflags --libs gtk+-3.0` -Wall./a.out

  運行結果如下:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级视频免费在线观看| 欧美理论片在线观看| 日韩欧美在线免费观看| 亚洲国产精品人久久电影| 亚洲精品成人久久电影| 热久久这里只有精品| 欧美精品在线播放| 成人疯狂猛交xxx| 中文字幕精品网| 国产精品一区二区久久| 亚洲欧美日韩国产中文| 欧美成人午夜剧场免费观看| 欧美精品videosex牲欧美| 亚洲成人免费在线视频| 国产精品69久久| 欧美日韩激情美女| 国产精品视频久久久| 久久久久在线观看| 久久免费成人精品视频| 午夜精品久久久久久99热软件| 欧美另类69精品久久久久9999| 亚洲视频网站在线观看| 日韩欧美在线视频免费观看| 欧美精品免费看| 国产午夜精品免费一区二区三区| 国产精品久久色| 国产精品久久久久久久久久新婚| 国产欧美精品久久久| 亚洲三级av在线| 欧美国产激情18| 亚洲国产精品一区二区久| 欧美黑人极品猛少妇色xxxxx| 日韩在线视频国产| 亚洲欧美成人在线| 国产亚洲精品久久久久久牛牛| 日韩暖暖在线视频| 国产91色在线免费| 法国裸体一区二区| 亚洲高清免费观看高清完整版| 亚洲精品一区中文字幕乱码| 成人亲热视频网站| 国产精品69精品一区二区三区| 中文字幕久久久av一区| 欧美激情在线狂野欧美精品| 伊人伊成久久人综合网站| 中文字幕精品国产| 在线亚洲午夜片av大片| 在线国产精品播放| 国产成人福利视频| 国内自拍欧美激情| 夜夜嗨av色一区二区不卡| 成人激情视频免费在线| 亚洲一级片在线看| 久久人人爽人人爽人人片av高请| 亚洲精品免费一区二区三区| 久久九九国产精品怡红院| 久久久免费精品视频| 亚洲精品久久久久久久久久久久| 亚洲欧洲中文天堂| 久久久亚洲网站| 91网站免费看| 欧美日韩福利电影| 欧美一区三区三区高中清蜜桃| 国产精品美女999| 久久久久久12| 日韩中文字幕国产| 日韩av在线免费看| 韩曰欧美视频免费观看| 亚洲色图欧美制服丝袜另类第一页| 亚洲成av人乱码色午夜| 91精品国产91久久久久久不卡| 91九色视频导航| 一区二区三区久久精品| 欧美孕妇与黑人孕交| 亚洲天堂男人天堂女人天堂| 性欧美长视频免费观看不卡| 国产欧美久久久久久| 国产精品www网站| 久久久www成人免费精品张筱雨| 色与欲影视天天看综合网| 92福利视频午夜1000合集在线观看| 日韩精品在线观看一区| 国产亚洲精品激情久久| 日韩成人在线电影网| 亚洲第一色中文字幕| 国产精品视频自拍| 日韩在线视频导航| 永久免费精品影视网站| 国产91在线高潮白浆在线观看| 国产成人精品久久久| 亚洲一区二区免费| 久久人人爽人人爽人人片av高清| 国产精品欧美风情| 国产一区二区三区中文| 亚洲成人黄色网址| 国产成人精品电影久久久| 成人激情视频小说免费下载| 日本三级韩国三级久久| 欧美亚洲视频在线观看| 亚洲视频在线看| 欧美大片免费观看在线观看网站推荐| 精品成人国产在线观看男人呻吟| 日韩av理论片| 91精品国产一区| 97成人精品区在线播放| 国内精品久久久久| 欧美日韩国产999| www国产亚洲精品久久网站| www.99久久热国产日韩欧美.com| 成人黄色av免费在线观看| 丝袜亚洲另类欧美重口| 亚洲成人性视频| 久久久这里只有精品视频| 亚洲va欧美va国产综合久久| 色综合色综合网色综合| 久久99热这里只有精品国产| 国产精品亚洲精品| 欧美日韩国产一区在线| 国产综合色香蕉精品| 色综合亚洲精品激情狠狠| 国产一区二区三区免费视频| 国自产精品手机在线观看视频| 欧美日韩国产限制| 欧美在线欧美在线| 国产男人精品视频| 欧美精品一二区| 色噜噜狠狠狠综合曰曰曰88av| 欧美极品在线视频| 欧美第一黄色网| 国产日韩欧美在线播放| 亚洲国产成人久久综合| 日韩精品极品毛片系列视频| 日韩极品精品视频免费观看| 原创国产精品91| 欧美影院久久久| 国内精品小视频| 亚洲一区二区在线播放| 欧美日韩性生活视频| 久久久精品亚洲| 午夜精品福利在线观看| 欧美国产精品va在线观看| 欧美极品少妇xxxxⅹ喷水| 疯狂做受xxxx高潮欧美日本| 久久国产精彩视频| 色噜噜久久综合伊人一本| 国产精品露脸av在线| 国产亚洲成av人片在线观看桃| 亚洲精品国产电影| 国产精品日韩av| 成人欧美一区二区三区在线湿哒哒| 国产丝袜一区二区三区免费视频| 精品视频一区在线视频| 97久久精品国产| 成人精品网站在线观看| 久久久免费观看| 欧美床上激情在线观看| 久久久综合av| 97色在线视频观看| 91精品国产91| 91人人爽人人爽人人精88v| 久久久中精品2020中文| 亚洲加勒比久久88色综合| 欧美国产激情18| 97精品国产97久久久久久|