999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Linux下GTK+自定義控件的設計和使用

2015-08-04 06:07:53李國玲
科技與創新 2015年15期

李國玲

摘 要:GTK+是一套跨多種平臺的圖形工具包,它提供了多種界面庫元素供用戶調用。但是,已有的界面庫元素僅能保證基礎的界面應用程序開發,當用戶需要特定功能的界面庫元素時,自定義控件的設計和使用就顯得尤為重要。結合工作實踐,對GTK+自定義控件的設計和使用進行了總結,以期為對GTK+感興趣的愛好者們提供參考。

關鍵詞:GTK+;界面庫;自定義控件;工具包

中圖分類號:TP311.52 文獻標識碼:A DOI:10.15913/j.cnki.kjycx.2015.15.115

文章編號:2095-6835(2015)15-0115-02

2013年的凌鏡門事件把國家信息安全推到了風口浪尖,隨著互聯網的飛速發展,全球信息化的不斷加速,信息安全也越來越受到人們的重視。國外軟硬件產品藏有后門的消息此起彼伏,國內市場對于國產軟硬件的需求愈發強烈。僅僅支持Windows操作系統平臺的軟件產品已經不能滿足市場需求,跨平臺的產品越來越受到人們的歡迎。GTK+是一套跨多種平臺的圖形工具包,能開發出滿足跨平臺要求的界面應用程序。GTK+工具包自帶的界面庫元素只能滿足最基本的應用程序要求,要開發出更高級的界面應用程序,需要滿足特定功能要求的自定義界面庫控件。

1 GTK+簡介

GTK(GIMP TookKit)是一套跨多種平臺的圖形工具包,是按照LGPL許可協議發布的。雖然最初是為GIMP而寫的,但時至今日早已發展為一個功能強大、設計靈活的通用圖形庫,特別是被GNOME選中,使得GTK+被廣泛應用,成為Linux下開發圖形界面應用程序的主流開發工具之一。GTK+是一套開放源碼的自由軟件,這一點保證了它的信息安全性。

2 GTK+自定義控件設計和使用

當已有的界面庫元素不能很好地滿足開發者要求時,需要考慮編寫自定義GTK+界面控件。

首先,分析該自定義控件需要滿足的功能,定義頭文件和實現文件。以自定義面板TestPanel為例,假設存在一個自定義面板,其中包含兩個按鈕button1和button2。另外給TestPanel定義一個回調函數pressed,應用程序綁定此回調函數。當點擊button1或者button2時,都觸發此回調函數。這就是TestPanel的功能定義。

參考gtkbutton的源碼,我們應該定義TestPanel.h、TestPanel.c、TestPanelPrivate.h這三個文件。由于TestPanelPrivate.h文件只包含一個控件信息結構體,因此可考慮把TestPanelPrivate.h文件的內容合并到TestPanel.h中。在TestPanel.h中就包含TestPanel、TestPanelClass、private_data這三個結構體的定義,如圖1所示。

TestPanel中的GtkVBox是該自定義控件的父控件,表示該自定義控件是基于工具包中的VBox之上的。Private_data參數就是結構體private_data對象,此處用指針表示。對應的TestPanelClass中包含一個GtkVBoxClass對象和pressed回調函數的聲明。

然后從自定義控件的創建函數開始逐步分析實現過程。在創建函數TestPanel_new中,調用GTK+的相關方法獲取自定義控件的類型信息,返回GtkType的對象。在獲取類型信息的同時,調用了testPanel_class_init的初始化方法。根據這個GtkType對象,創建一個自定義控件的GtkWidget對象。接著初始化該自定義控件,包括在控件上添加兩個按鈕,并綁定按鈕的點擊事件。

接下來要定義回調函數。在自定義控件的實現文件中定義一個靜態數組,為static guint testPanel??? signals[LAST SIGNAL]={0};,用來存儲所有的回調命令。然后在testPanel_class_init方法中初始化回調命令,如圖2所示,其中,object_class是把參數TestPanelClass*klass強轉成GtkObjectClass*。

圖2 初始化回調命令程序

接著定義在自定義控件內部何時觸發此回調函數,調用gtk_signal_emit函數即可觸發。在本例中,在button1和button2的clicked事件中觸發pressed回調函數,程序為gtk_signal_emit(GTK_OBJECT(panel),testPanel_signals[PRESSED]);

最后,實現完自定義控件后,應用程序就像和使用基礎類庫的基本界面元素一樣使用自定義控件。如圖3所示,調用new方法來構造對象,調用gtk_signal_connect方法綁定回調函數,調用gtk_container_add把它添加到其他的GTK容器中。

圖3 自定義控件使用程序

3 結束語

GTK+是在Linux環境下一套非常實用的工具界面庫。同時,它也是一套完全開源的自由軟件,對源碼的研究有助于界面應用程序的開發,也能幫助我們更好地理解GTK+的設計思想和實現方法。參考源碼實現,開發者們可以自定義一些適用于界面應用程序的界面控件。在實現自定義控件的過程中,可以按照自己的設計思想來實現,不需要照本宣科。當然,這需要我們在實踐當中不斷探索和學習。

參考文獻

[1]戰曉蘇.Gtk+程序設計[M].北京:清華大學出版社,2002.

[2]博韋.深入理解LINUX內核[M].陳莉群,馮銳,牛欣源,譯.北京:中國電力出版社,2008.

〔編輯:王霞〕

主站蜘蛛池模板: 亚洲综合国产一区二区三区| 国产精品一区在线观看你懂的| 国产精品无码翘臀在线看纯欲| 黄色三级毛片网站| 中文字幕永久视频| 成人亚洲国产| 成人福利视频网| 五月天丁香婷婷综合久久| 成人国产精品视频频| 国产日韩欧美视频| 午夜视频免费试看| 青青青伊人色综合久久| 国产欧美在线视频免费| 日韩无码视频网站| a级毛片免费在线观看| 亚洲欧美精品日韩欧美| 久久精品人妻中文视频| 91精品aⅴ无码中文字字幕蜜桃| 中文字幕亚洲精品2页| 国产一区二区网站| 国产美女在线观看| 精品第一国产综合精品Aⅴ| 白浆免费视频国产精品视频| 99久久精品美女高潮喷水| 国产精品尤物铁牛tv| 国产精品思思热在线| 免费观看国产小粉嫩喷水| 福利一区在线| 亚洲第一色视频| 国产一区二区三区精品久久呦| 一级毛片免费高清视频| 亚洲欧美日本国产综合在线 | 国产精品成人一区二区不卡| 久久久波多野结衣av一区二区| 亚洲中文无码av永久伊人| 国产九九精品视频| 囯产av无码片毛片一级| 69视频国产| 欧美日韩综合网| 最新国产网站| 国产激情无码一区二区三区免费| 91久久国产热精品免费| 国产在线八区| 九色综合伊人久久富二代| 国产精品视频免费网站| 欧美综合成人| 97精品国产高清久久久久蜜芽 | 亚洲第一天堂无码专区| 亚洲国产AV无码综合原创| 精品亚洲国产成人AV| 国产99热| 黄色网页在线播放| 日韩区欧美国产区在线观看| 亚洲成人77777| 久久久久国色AV免费观看性色| a级毛片毛片免费观看久潮| 最新亚洲人成网站在线观看| 美女无遮挡免费网站| 激情综合五月网| 午夜视频免费试看| 91午夜福利在线观看| 高清国产在线| 日本三级黄在线观看| 2021国产精品自产拍在线| 青青青亚洲精品国产| 久久精品女人天堂aaa| 欧美翘臀一区二区三区| 久久夜色精品国产嚕嚕亚洲av| 精品国产www| 高清精品美女在线播放| 欧美亚洲另类在线观看| 国产欧美视频在线| 国产精品入口麻豆| 91久久精品国产| 91福利免费| 岛国精品一区免费视频在线观看| 亚洲一区二区日韩欧美gif| 精品久久久久成人码免费动漫 | 国产乱人伦AV在线A| 日本不卡在线播放| 91小视频版在线观看www| 风韵丰满熟妇啪啪区老熟熟女|