GtkApplication對象

      網友投稿 683 2025-04-02

      使用GtkApplication對象的實例:

      #include static void activateApp(GApplication *app,gpointer user_data){ GtkWidget *window; window = gtk_application_window_new(GTK_APPLICATION(app)); gtk_widget_show(window); } int main(int argc,char** argv){ GtkApplication *app; int status; app = gtk_application_new("org.gnome.wong",G_APPLICATION_FLAGS_NONE); g_signal_connect(app,"activate",G_CALLBACK(activateApp),NULL); status = g_application_run(G_APPLICATION(app),argc,argv); return status; }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      GtkApplication的出現是為了讓我們的核心程序代碼與main()函數分開。main()函數是由操作系統來調用的,屬于操作系統實現細節。

      main()并不關心我們的程序能做什么的,有什么樣的行為。操作系統只知道要啟動應用程序,就調用它main()函數,僅此而已。而我們的程序對要做什么,要響應什么是很感興趣的,不關心操作系統調用main()函數的確切機制。

      這樣的分離做法也顯得很合理了。

      GTK+庫并沒有默認實現main函數,需要我們自己來實現。除了在main()函數里創建GtkApplication對象并運行它之外,盡量不要在main()函數里做過多的操作。真正的工作,通常在GtkApplication發出的信號中完成。GtkApplication運行時可能發出的信號:

      startup: 當程序第一次啟動時,startup信號就會被觸發,可以對應用程序進行一些設置。

      shutdown: 執行關閉任務,如保存文件到磁盤等

      activate: 程序啟動時,顯示應用程序默認的第一個窗口,特別是在桌面環境下首次打開應用程序的情況。

      open: 打開文件,并在新窗口顯示。使用應用程序從文件瀏覽器嘗試打開文檔的情況。

      應用可以注冊除了默認的“activate”和“open“行為之外的行為。

      GtkApplication對象默認是一個單例。程序啟動后的第一個實例,稱為主實例。遠程實例就是除主實例外的其他運行實例。本地實例就是當前實例。

      當用戶償試打開第二個GtkApplication對象單例時,GtkApplication將發信號到主實例。主實例將再次收到activate或open信號。這種情況下,第二個實例將馬上退出,也不調用startup或shutdown。

      現在,你應該明白為什么不要在main函數做太多操作的原因了吧。這樣可以避免第二個實例做無用功。所有啟動初始化都應用在startup中完成。可以調用g_application_hold()強制應用保持存活。

      如果本地實例是主實例,那么函數調用GtkApplication實例產生的信號,會在本地中觸發。如果本地實例是一個遠程實例,那么函數調用產生的信號將被發送到主實例中,并在那里被觸發。例如,在主實例中,調用g_application_activate(),將在主實例中觸發“activate”信號;如果在遠程實例中調用它,則產生一個消息并發送到主實例,然后,在主實例將觸發“activate”。

      《GtkApplication函數使用》

      GtkApplication對象

      謝謝閱讀

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:用sum算合計的時候,為什么按左邊的“Alt和=”就可以,按右邊的“Alt和=”公式就出不來
      下一篇:0x6 Java系列:java 泛型詳解-絕對是對泛型方法講解最詳細的,沒有之一
      相關文章
      亚洲an日韩专区在线| 亚洲欧洲在线观看| 亚洲黄网站wwwwww| 国产精一品亚洲二区在线播放| 亚洲区小说区图片区| 亚洲精品动漫人成3d在线| 成人亚洲国产精品久久| 亚洲精品国产suv一区88| 亚洲最大的成人网| 亚洲中文字幕无码中文| 亚洲AV无码一区二区三区牛牛| 亚洲一卡2卡4卡5卡6卡残暴在线| 亚洲欧洲春色校园另类小说| 久久精品蜜芽亚洲国产AV | 亚洲AV无码成人网站久久精品大| 亚洲乱色熟女一区二区三区丝袜| 亚洲真人无码永久在线| 亚洲真人无码永久在线| 国产亚洲精品xxx| 亚洲成AV人片在线观看无| 久热综合在线亚洲精品| 久久噜噜噜久久亚洲va久| 亚洲大片在线观看| 亚洲最新永久在线观看| 亚洲精品视频在线观看免费| 亚洲精品韩国美女在线| 久久精品国产亚洲AV久| 亚洲一线产品二线产品| 亚洲国产成人综合精品| 国产亚洲精品欧洲在线观看| 久久亚洲国产成人精品无码区| 亚洲日产无码中文字幕| 亚洲av女电影网| 亚洲熟妇无码久久精品| 国产成人精品日本亚洲11| 亚洲欧好州第一的日产suv| 国产亚洲精品美女| 中文字幕亚洲一区二区三区| 亚洲va无码手机在线电影| 亚洲黄色免费网址| 色在线亚洲视频www|