![linux環(huán)境程序設(shè)計教學(xué)第26章glade程序界面_第1頁](http://file4.renrendoc.com/view/73e38f9af0183cbf5c5ca32353b385e1/73e38f9af0183cbf5c5ca32353b385e11.gif)
![linux環(huán)境程序設(shè)計教學(xué)第26章glade程序界面_第2頁](http://file4.renrendoc.com/view/73e38f9af0183cbf5c5ca32353b385e1/73e38f9af0183cbf5c5ca32353b385e12.gif)
![linux環(huán)境程序設(shè)計教學(xué)第26章glade程序界面_第3頁](http://file4.renrendoc.com/view/73e38f9af0183cbf5c5ca32353b385e1/73e38f9af0183cbf5c5ca32353b385e13.gif)
![linux環(huán)境程序設(shè)計教學(xué)第26章glade程序界面_第4頁](http://file4.renrendoc.com/view/73e38f9af0183cbf5c5ca32353b385e1/73e38f9af0183cbf5c5ca32353b385e14.gif)
![linux環(huán)境程序設(shè)計教學(xué)第26章glade程序界面_第5頁](http://file4.renrendoc.com/view/73e38f9af0183cbf5c5ca32353b385e1/73e38f9af0183cbf5c5ca32353b385e15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第26章Glade設(shè)計程序界面Glade是Linux系統(tǒng)中設(shè)計GTK+程序界面的所見即所得工具。開發(fā)者可將窗體構(gòu)件作為畫布,通過向畫布添加界面構(gòu)件設(shè)計程序界面。這種方式最大的優(yōu)勢在于設(shè)計的同時能直觀地看到界面構(gòu)件,并且可以隨時調(diào)整界面的設(shè)計,設(shè)計界面如同畫圖一般。Glade所設(shè)計的界面以XML格式保存,因此界面和程序邏輯是完全分離的,使程序界面設(shè)計更為輕松。本章將介紹Glade的使用方法,以及C語言接口函數(shù)庫。26.1Glade簡介Glade界面設(shè)計軟件是GNOME桌面環(huán)境的子項目,用于為GNOME桌面環(huán)境上運行的程序提供圖形用戶界面。Glade使用GPL協(xié)議發(fā)布,雖然是開源軟件,但它的設(shè)計思想和易用性都領(lǐng)先于大多數(shù)商業(yè)集成開發(fā)環(huán)境中的界面設(shè)計工具。在Glade的界面中,大部分常用GTK+界面構(gòu)件被作為圖標(biāo)放在工具欄中。開發(fā)者如果需要向界面中添加某一個構(gòu)件,只需從工具欄上選擇即可。26.1Glade簡介添加了界面構(gòu)件后,可直接在Glade中為界面構(gòu)件設(shè)置屬性,以及連接回調(diào)函數(shù)。設(shè)計的結(jié)果可保存為一個Glade界面項目文件,實際該文件是XML文件。如下例所示:<?xmlversion="1.0"encoding="UTF-8"standalone="no"?><!DOCTYPEglade-interfaceSYSTEM"glade-2.0.dtd"><!--Generatedwithglade33.4.5onThuMar2621:13:512009--><glade-interface>
<widgetclass="GtkWindow"id="window">
<child>
<widgetclass="GtkButton"id="button">
<propertyname="visible">True</property>
<propertyname="can_focus">True</property>
<propertyname="receives_default">True</property>
<propertyname="label"translatable="yes">button</property>
<propertyname="response_id">0</property>
<signalname="clicked"handler="gtk_main_quit"/>
</widget>
</child>
</widget></glade-interface>26.1Glade簡介這段代碼是用Glade生成的,它實現(xiàn)了一個窗體構(gòu)件和窗體中放置的一個按鈕構(gòu)件。代碼第一行定義了XML格式版本和字符編碼,第二行是實際用途的說明。從第5行開始定義窗體構(gòu)件,而按鈕構(gòu)件是作為窗體構(gòu)件的子構(gòu)件定義。其中,還為按鈕構(gòu)件的clicked信號連接了gtk_main_quit()函數(shù),實現(xiàn)了按鈕構(gòu)件的功能。XML格式的引入是Glade最主要的特性,它使程序的界面部分完全獨立。在大部分情況下,開發(fā)者不用去修改XML格式的內(nèi)容,只需要通過libglade函數(shù)庫將程序邏輯部分與界面項目文件連接起來。Glade的另一特性是能夠直接顯示容器的層次,而閱讀源程序很難理解復(fù)雜的容器結(jié)構(gòu)。安裝Glade可在其官方網(wǎng)站下載源代碼編譯,地址為。或者在終端輸入下列命令:apt-getinstallglade安裝成功后,可選擇GNOME桌面的“Dash主頁”|“Glade”命令啟動Glade程序。26.2構(gòu)造圖形界面任何復(fù)雜的圖形界面都可以使用Glade構(gòu)造,它可以縮短圖形界面設(shè)計的周期,并在最大程度上保證代碼的正確性。在使用Glade前,開發(fā)者需要對GTK+有初步的認(rèn)識,本書前一部分的內(nèi)容已介紹了這些知識。Glade可成為首選的界面設(shè)計軟件,替代C語言中繁復(fù)的編碼過程。本節(jié)將介紹使用Glade構(gòu)造圖形界面的方法。26.2.1添加窗體Glade提供了11種窗體構(gòu)件供用戶選擇,這些都是在GTK+中所預(yù)定義的。開發(fā)者可在Glade主界面左側(cè)“頂層”選項卡中選擇所需要添加的窗體構(gòu)件。選項卡中每一個按鈕對應(yīng)著一種窗體構(gòu)件,這些按鈕的名稱依次為:1.通用窗體構(gòu)件通用窗體構(gòu)件即gtk_window_new()函數(shù)所創(chuàng)建的窗體,單擊該構(gòu)件可在Glade主界面的編輯區(qū)域創(chuàng)建一個新窗體。Glade中所顯示的為窗體的主體部分,窗體的標(biāo)題欄和邊框不會顯示。其橙色邊框所界定的范圍為實際窗體的尺寸,可用鼠標(biāo)拖動藍(lán)色邊框改變窗體的尺寸。窗體主體中間的網(wǎng)格區(qū)域表示是未添加界面構(gòu)件的容器區(qū)域,該部分可放置界面構(gòu)件。一個Glade項目中可以建立多個窗體構(gòu)件,每個窗體構(gòu)件都作為一個頂層容器被顯示在Glade主界面右上方的“容器”列表中??稍凇叭萜鳌绷斜碇须p擊窗體構(gòu)件的名稱打開窗體進(jìn)行編輯。或者右擊窗體名稱,在彈出菜單中選擇“刪除”命令,從項目中刪除一個窗體構(gòu)件。Glade支持窗體的復(fù)制、剪切和粘貼操作,用于在同一個項目內(nèi)創(chuàng)建窗體的副本,或者將窗體復(fù)制到不同項目中。26.2.1添加窗體2.通用窗體構(gòu)件(失去焦點的)該通用窗體構(gòu)件即gtk_offscreen_window_new()函數(shù)所創(chuàng)建的窗體,單擊該構(gòu)件可在Glade主界面的編輯區(qū)域創(chuàng)建一個新窗體。3.通用對話框構(gòu)件通用對話框構(gòu)件對應(yīng)gtk_dialog_new_with_button()函數(shù)所創(chuàng)建的窗體,它的內(nèi)部由一個縱向組裝盒容器和一個按鈕盒容器組成。通用對話框在程序運行時不顯示最小化和最大化按鈕,用戶也不能通過拖拉操作改變其尺寸。通用對話框的縱向組裝盒內(nèi)可放置其它容器或窗體構(gòu)件。按鈕盒預(yù)留了兩個按鈕的位置,該位置只能放置按鈕構(gòu)件或者按鈕構(gòu)件的子類。如果按鈕的個數(shù)少于或多于按鈕盒預(yù)留的位置,可在“常規(guī)”選項卡修改按鈕的個數(shù)。26.2.1添加窗體4.關(guān)于對話框關(guān)于對話框是通過gtk_about_dialog_new()函數(shù)建立的,用于顯示當(dāng)前應(yīng)用程序的信息。關(guān)于對話框繼承了通用對話框的特性,只是預(yù)先定義了一些界面構(gòu)件在其內(nèi)。關(guān)于對話框中顯示的內(nèi)容可直接在“常規(guī)”選項卡中設(shè)置。這些內(nèi)容對應(yīng)所有應(yīng)用程序的特性,并遵循通用版式,如下所示:(1)名稱。對話框構(gòu)件在程序中的名稱,對應(yīng)gtk_about_dialog_set_name()函數(shù)的功能。該函數(shù)的一般形式為:voidgtk_about_dialog_set_name(GtkAboutDialog*about,
constgchar*name);(2)程序名稱。當(dāng)前項目所建立應(yīng)用程序的名稱,程序名稱用大字號顯示在關(guān)于對話框中心區(qū)域。對應(yīng)gtk_about_dialog_set_program_name()函數(shù)的功能,該函數(shù)的一般形式為:voidgtk_about_dialog_set_program_name(GtkAboutDialog*about,
constgchar*name);(3)程序版本。當(dāng)前項目的版本號,顯示在程序名稱之后,使用與程序名稱相同的字號。對應(yīng)gtk_about_dialog_set_version()函數(shù)的功能,它的一般形式為:voidgtk_about_dialog_set_version(GtkAboutDialog*about,
constgchar*version);26.2.1添加窗體(4)版權(quán)字符串。當(dāng)前項目的版權(quán)信息,顯示在程序名稱下方,使用較小的字號。對應(yīng)gtk_about_dialog_set_copyright()函數(shù)的功能,它的一般形式為:voidgtk_about_dialog_set_copyright(GtkAboutDialog*about,constgchar*copyright);(5)評論字符串。評論字符串是當(dāng)前應(yīng)用程序主要功能的表述,顯示在程序名稱和版權(quán)字符串之間。對應(yīng)ments()函數(shù)的功能,它的一般形式為:voidments(GtkAboutDialog*about,constgchar*comments);(6)網(wǎng)站URL。當(dāng)前項目發(fā)行者的網(wǎng)站地址,顯示在版權(quán)信息下方,字符串有下劃線。單擊該地址將在瀏覽器中打開所指向的網(wǎng)頁。對應(yīng)gtk_about_dialog_set_website()函數(shù),它的一般形式為:voidgtk_about_dialog_set_website(GtkAboutDialog*about,constgchar*website);(7)網(wǎng)站標(biāo)簽。如果設(shè)置了網(wǎng)站標(biāo)簽,那么網(wǎng)站地址不會直接顯示在關(guān)于對話框上,而是用網(wǎng)站標(biāo)簽內(nèi)的字符串代替。對應(yīng)gtk_about_dialog_set_website_label()函數(shù),它的一般形式為:voidgtk_about_dialog_set_website_label(GtkAboutDialog*about,constgchar*website_label);26.2.1添加窗體(8)許可。設(shè)置許可信息后,關(guān)于對話框的左下角將出現(xiàn)一個許可按鈕,按下該按鈕會在一個新對話框中列出許可信息的內(nèi)容。許可信息的內(nèi)容通常為GPL協(xié)議相關(guān)信息。許可信息可通過gtk_about_dialog_set_license()函數(shù)設(shè)置,它的一般形式為:voidgtk_about_dialog_set_license(GtkAboutDialog*about,
constgchar*license);(9)作者。當(dāng)前項目的程序開發(fā)者名稱,可輸入多個作者的信息。設(shè)置作者信息后,界面左下角將增加一個鳴謝按鈕。按下該按鈕會彈出“鳴謝”對話框,列出作者、翻譯、美工等信息。如果要在作者名稱后插入電子郵件地址或網(wǎng)絡(luò)地址,并且使它們成為超級連接,可通過尖括號“<>”包圍地址信息實現(xiàn)。作者信息可通過gtk_about_dialog_set_authors()函數(shù)設(shè)置,它的一般形式為:voidgtk_about_dialog_set_authors(GtkAboutDialog*about,
constgchar**authors);(10)文檔撰寫者。當(dāng)前項目的說明書等文檔撰寫者的名稱,該信息顯示在“鳴謝”對話框中。對應(yīng)gtk_about_dialog_set_documenters()函數(shù)的功能,它的一般形式為:voidgtk_about_dialog_set_documenters(GtkAboutDialog*about,
constgchar**documenters);(11)翻譯者。當(dāng)前項目的翻譯工作者名稱,該信息顯示在“鳴謝”對話框中。對應(yīng)gtk_about_dialog_set_translator_credits()函數(shù)的功能,它的一般形式為:voidgtk_about_dialog_set_translator_credits(GtkAboutDialog*about,
constgchar*translator_credits);26.2.1添加窗體(12)美工。當(dāng)前項目的美工名稱,該信息顯示在“鳴謝”對話框中。對應(yīng)gtk_about_dialog_set_artists()函數(shù)的功能,它的一般形式為:voidgtk_about_dialog_set_artists(GtkAboutDialog*about,
constgchar**artists);(13)標(biāo)志。用于設(shè)置當(dāng)前項目的標(biāo)志,可以是GTK+支持的任何圖形格式文件,顯示在標(biāo)題欄下方。設(shè)置標(biāo)志文件可通過gtk_about_dialog_set_logo()函數(shù)實現(xiàn),它的一般形式為:voidgtk_about_dialog_set_logo(GtkAboutDialog*about,
GdkPixbuf*logo);26.2.1添加窗體5.顏色選擇對話框顏色選擇對話框?qū)?yīng)GTK+庫中的gtk_color_selection_dialog_new()函數(shù)所建立的對話框,用于選擇顏色。窗體中的大部分內(nèi)容是固定的,不可被用戶修改,用戶只能在其中的縱向組裝盒容器中添加界面構(gòu)件。6.文件選擇對話框文件選擇對話框可通過gtk_file_chooser_dialog_new()函數(shù)創(chuàng)建,它有一個縱向組裝盒可用于放置界面構(gòu)件,另外還提供了一個按鈕盒放置按鈕。如果沒有指定按鈕,那么Glade會為其自動從按鈕庫添加GTK_STOCK_CANCEL和GTK_STOCK_OPEN。文件選擇對話框有一個重要屬性,即“動作”屬性??稍凇俺R?guī)”選項卡中設(shè)置,它有4個選項,默認(rèn)為“打開”,其它選項依次為“保存”、“選擇目錄”和“創(chuàng)建目錄”。這4個選項用于設(shè)置對話框的功能特性,與此同時對話框的標(biāo)題和外觀也會跟隨設(shè)置改變。7.字體選擇對話框字體選擇對話框?qū)?yīng)gtk_font_selection_dialog_new()函數(shù)的功能,它的大部分組件不能被修改,只提供了一個縱向組裝盒用于添加界面構(gòu)件。26.2.1添加窗體8.消息對話框消息對話框?qū)?yīng)gtk_message_dialog_new()函數(shù)的功能,所有內(nèi)容均可在“常規(guī)”選項卡中設(shè)置。如下所示。消息類型:用于定義消息對話框顯示的風(fēng)格,選項依次為“信息”、“警告”、“問題”、“錯誤”和“其它”。消息按鈕:用于定義消息對話框中所顯示的按鈕,選項依次為“無”、“確定”、“關(guān)閉”、“取消”、“是,否”和“確定,取消”。文字:用大字體顯示的消息文本。次要文本:用小字體顯示的消息文本。9.最近選擇對話框最近選擇對話框?qū)?yīng)gtk_recent_chooser_dialog_new()函數(shù)的功能,用于顯示最近用戶編輯過的文件?!俺R?guī)”選項卡的“限制”微調(diào)框可設(shè)置文件顯示的最多個數(shù)?!芭判蝾愋汀毕吕斜砜蚩稍O(shè)置文件列表的排序方法,依次為“無”、“最近使用最多的一個”、“最近使用最少的一個”和“定制”。對話框中有一個按鈕盒構(gòu)件,可裝入要顯示的按鈕。10.輔助輔助是一種分為多頁顯示內(nèi)容的向?qū)Т绑w,在GTK+庫中可使用gtk_assistant_new()函數(shù)創(chuàng)建。每一頁中都默認(rèn)放置著一個文本標(biāo)簽構(gòu)件,用于顯示文本信息。如果需要放置其它構(gòu)件,可將文本標(biāo)簽刪除。窗體的右下方有兩個按鈕,分別用于向前翻頁和向后翻頁。如果當(dāng)前頁面是第一面,“后退”按鈕將被隱藏。如果是最后一頁,“前進(jìn)”按鈕會被“應(yīng)用”按鈕替代。11.選擇打開程序?qū)υ捒蜻x擇打開程序?qū)υ捒驅(qū)?yīng)gtk_app_chooser_dialog_new()函數(shù)的功能,用于顯示最近打開文件的應(yīng)用程序。26.2.2添加容器Glade提供了19種容器構(gòu)件供用戶選擇,這些都是在GTK+中所預(yù)定義的。開發(fā)者可在Glade主界面左側(cè)“容器”選項卡中選擇所需要添加的容器構(gòu)件。選項卡中每一個按鈕對應(yīng)著一種容器構(gòu)件。根據(jù)使用方法和作用的不同,可將這些容器依次分為下列類別。1.橫向組裝盒與縱向組裝盒單擊縱向組裝盒按鈕時,Glade會提示輸入條目數(shù),該數(shù)值是容器中單元格的個數(shù)。在使用gtk_hbox_new()和gtk_vbox_new()時并不需要提供這些參數(shù),設(shè)置單元格的個數(shù)是為了便于可視化編輯。設(shè)置后可在“常規(guī)”選項卡中修改單元格的個數(shù)。在容器中可繼續(xù)裝入其它的容器,容器的層次并沒有限制。Glade對容器的管理非常靈活,其主界面右上方的“容器”列表內(nèi)將根據(jù)容器名稱顯示出容器的層次。如果需要在容器的上一級增加一個容器,可右擊編輯區(qū)內(nèi)的容器,或者右擊“容器”列表中的容器名。在彈出菜單“添加上一級”子菜單中,選擇要添加的容器。刪除容器則有兩種方式。第一種是右擊編輯區(qū)中的容器或“容器”列表中的容器名,在彈出菜單中選擇“刪除”命令。這將刪除容器本身,以及容器內(nèi)的所有界面構(gòu)件。另一種方法是在彈出菜單中選擇“清除上一級”命令,只有容器的上一級容器被刪除,容器本身的層次向前移了一位。復(fù)制、剪切和粘貼也可用于容器,影響的將是容器內(nèi)的所有界面構(gòu)件。Glade會為這些構(gòu)件的副本重新命名。2.表格表格按鈕對應(yīng)gtk_table_new()函數(shù)的功能,按下時將提示輸入表格的行數(shù)和列數(shù)?;蛘咴趧?chuàng)建表格后,通過“常規(guī)”選項卡中的“行數(shù)”和“列數(shù)”輸入框修改。3.筆記本筆記本按鈕對應(yīng)gtk_notebook_new()函數(shù),按下時將提示輸入筆記本的頁數(shù)。該頁數(shù)可在創(chuàng)建筆記本后通過“常規(guī)”選項卡中“頁”微調(diào)框中修改。筆記本構(gòu)件中選項卡的名稱作為文本標(biāo)簽構(gòu)件列在“容器”列表內(nèi),可單擊該名稱,在“常規(guī)”選項卡的“標(biāo)簽”文本框中修改。26.2.2添加容器4.框架和外觀框架創(chuàng)建框架構(gòu)件所對應(yīng)的是gtk_frame_new()函數(shù),使用Glade創(chuàng)建框架構(gòu)件時會自動添加一個對齊構(gòu)件和一個標(biāo)簽構(gòu)件。對齊構(gòu)件是框架內(nèi)的下一層容器,標(biāo)簽構(gòu)件顯示在框架的右上方??蚣艿倪吙蝻L(fēng)格可在“常規(guī)”選項卡內(nèi)的“框架陰影”下拉列表框中設(shè)置,選項依次為“無”、“里面”、“突出”、“向內(nèi)蝕刻”和“向外蝕刻”。外觀框架又稱比例框架構(gòu)件,所對應(yīng)的是gtk_aspect_frame_new()函數(shù)。外觀框架的比例屬性可在“常規(guī)”選項卡內(nèi)的“比率”微調(diào)框內(nèi)設(shè)置。5.菜單條Glade添加菜單條的功能遠(yuǎn)比gtk_menu_bar_new()函數(shù)所實現(xiàn)的功能要豐富,它能同時添加菜單容器和菜單項。Glade沒有將菜單容器和菜單項作為獨立的界面構(gòu)件,而是提供了菜單編輯器專門用于設(shè)計菜單。右擊編輯區(qū)中的菜單,在彈出菜單中選擇“編輯”命令,將打開菜單編輯器。在菜單編輯器左側(cè)的標(biāo)簽列表中選擇菜單項名稱后,可編輯該菜單項。菜單編輯器右側(cè)有4個屬性可以設(shè)置,依次如下。名稱:在代碼中訪問該菜單項的名稱。類型:根據(jù)GTK+對菜單項的定義,可選取的值有“普通的”、“圖像”、“復(fù)選”、“單選”和“分割條”。標(biāo)簽:顯示在菜單中的字符串。工具提示:鼠標(biāo)懸停時顯示的文本,菜單編輯器會為菜單項自動添加工具提示對象。庫存條目:該選項在菜單項“類型”設(shè)置為“圖像”時顯示,可從圖像庫中選擇菜單項的圖形。如果要添加一個菜單項,可單擊“添加”按鈕,新菜單項將在菜單項列表中所選菜單項后一位,且處于同一層?;蛘哂覔袅斜碇械牟藛雾?,選擇“添加子項目”命令,創(chuàng)建所選菜單項的下一級菜單。菜單編輯器的下方是信號與事件的列表,可直接在此為菜單項連接事件與回調(diào)函數(shù)。如果要為菜單項添加快捷方式,操作步驟為:(1)在“容器”列表內(nèi)選擇菜單項。(2)選擇“容器”列表下的公共選項卡,單擊“快捷鍵”后的編輯按鈕。(3)在“選擇快捷鍵”對話框中,選擇對應(yīng)的信號、按鍵和控制鍵。26.2.2添加容器6.工具條工具條對應(yīng)gtk_toolbar_new()函數(shù)的功能,創(chuàng)建后在編輯區(qū)右擊工具條,在彈出的快捷菜單中選擇“編輯”命令,可打開“工具條編輯器”對話框。在“工具條編輯器”中,可單擊“添加”按鈕添加一個工具構(gòu)件?!邦愋汀毕吕斜砜蛴糜诙x工具構(gòu)件的類型,默認(rèn)為“按鈕”。工具構(gòu)件的信號與事件可在對話框下側(cè)的信號列表中設(shè)置。7.水平窗格和垂直窗格水平窗格和垂直窗格對應(yīng)gtk_hpaned_new()和gtk_vpaned_new()函數(shù)的功能,初始位置可在“常規(guī)”選項卡內(nèi)的“位置”微調(diào)框中設(shè)置,并且要將“位置設(shè)置”的值設(shè)為“是”才能在程序中生效。8.橫向按鈕盒與縱向按鈕盒橫向按鈕盒與縱向按鈕盒對應(yīng)gtk_hbutton_box_new()和gtk_vbutton_box_new()函數(shù)的功能。為了方便編輯,需要在“常規(guī)”選項卡內(nèi)的“條目數(shù)”微調(diào)框中指定按鈕盒內(nèi)單元格的個數(shù),默認(rèn)值為3。9.陳列陳列即是指布局容器,對應(yīng)gtk_layout_new()函數(shù)的功能。布局容器最大尺寸可在“常規(guī)”選項卡內(nèi)的“寬度”和“高度”微調(diào)框中設(shè)置。10.固定固定容器對應(yīng)gtk_fixed_new()函數(shù)的功能。26.2.2添加容器11.事件框事件框?qū)?yīng)gtk_event_box_new()函數(shù)的功能。12.展開器展開器對應(yīng)gtk_expander_new()函數(shù)的功能,它由一個箭頭構(gòu)件、一個標(biāo)簽和一個容器所組成。單擊箭頭可改變箭頭的方向。當(dāng)箭頭構(gòu)件指向下時,展開器內(nèi)的容器構(gòu)件將顯示。而在箭頭指向右方時,展開器內(nèi)的容器將被隱藏。13.視口視口即視見區(qū),對應(yīng)gtk_viewport_new()函數(shù)的功能?!俺R?guī)”選項卡內(nèi)的“陰影類型”下拉列表框可設(shè)置其邊框的類型,選項依次為“無”、“里面”、“突出”、“向內(nèi)蝕刻”和“向外蝕刻”。14.可滾動的窗口可滾動的窗口即滾動條窗體構(gòu)件,對應(yīng)gtk_scrolled_window_new()函數(shù)的功能。它包括一組滾動條構(gòu)件和一個視見區(qū),但在Glade中不可直接訪問其子構(gòu)件的屬性。如果要設(shè)置滾動條構(gòu)件的顯示狀態(tài),可通過“常規(guī)”選項卡內(nèi)的“水平滾動條策略”和“垂直滾動條策略”下拉列表框設(shè)置。26.2.2添加容器15.對齊對齊容器對應(yīng)gtk_alignment_new()函數(shù)。在“常規(guī)”選項卡中可設(shè)置其屬性,這些屬性依次為:水平排列:取值范圍為0.0至1.0,即最左到最右。垂直排列:取值范圍為0.0至1.0,即最上到最下。水平縮放比率:如果水平方向可用的空間比子構(gòu)件所需要的多,設(shè)置子部件將使用多少。0.0表示不用,1.0表示全部。垂直縮放比率:如果垂直方向可用的空間比子構(gòu)件所需要的多,設(shè)置子部件將使用多少。0.0表示不用,1.0表示全部。頂部留空:上方的邊界值。底部留空:下方的邊界值。左部留空:左面的邊界值。右部留空:右面的邊界值。26.2.3添加構(gòu)件Glade提供了兩組界面構(gòu)件,分別位于“控制和顯示”選項卡與“過時的Gtk+”選項卡中。后者是GTK+為了保持與舊版本兼容所以仍然在使用的界面構(gòu)件。這些界面構(gòu)件均已被其它構(gòu)件所替代,并且不再被更新,甚至可能會被將來的版本拋棄,應(yīng)謹(jǐn)慎選擇這些構(gòu)件。常用的界面構(gòu)件可分為如下幾類。1.按鈕按鈕構(gòu)件共有9種。單擊代表構(gòu)件的按鈕后,將鼠標(biāo)指針移動到編輯區(qū)的容器上方,可見光標(biāo)變?yōu)橐粋€加號外加構(gòu)件圖標(biāo)的形狀。再次按下鼠標(biāo)左鍵,構(gòu)件將被添加到容器以內(nèi)。這些按鈕依次為。普通按鈕對應(yīng)gtk_button_new()函數(shù)的功能。開關(guān)按鈕對應(yīng)gtk_toggle_button_new()函數(shù)的功能。復(fù)選按鈕對應(yīng)gtk_check_button_new()函數(shù)的功能。微調(diào)按鈕對應(yīng)gtk_spin_button_new()函數(shù)的功能。單選按鈕對應(yīng)gtk_radio_button_new()函數(shù)的功能,Glade可以自動為單選按鈕添加GSList鏈表。如果要使多個單選按鈕使用同一個鏈表,即劃為同一組,可單擊“常規(guī)”選項卡“組”后的編輯按鈕,彈出“在工程中選擇單選按鈕”對話框。然后選擇該組中第一個單選按鈕的名稱。文件選擇按鈕對應(yīng)gtk_file_chooser_button_new()函數(shù)的功能。顏色按鈕對應(yīng)gtk_color_button_new()函數(shù)的功能。字體按鈕對應(yīng)gtk_font_button_new()函數(shù)的功能。連接按鈕對應(yīng)gtk_link_button_new()函數(shù)的功能,連接的網(wǎng)絡(luò)地址可在“常規(guī)”選項卡內(nèi)的URL文本框中輸入。26.2.3添加構(gòu)件2.圖像圖像對應(yīng)gtk_image_new_from_stock()函數(shù)的功能,可在“常規(guī)”選項卡內(nèi)“庫存圖像”下拉列表框中設(shè)置圖像,默認(rèn)情況下使用的是圖像庫內(nèi)GTK_MISSING_IMAGE。圖像的尺寸可在“圖標(biāo)大小”微調(diào)框內(nèi)設(shè)置,取值對應(yīng)GtkIconSize枚舉類型,有效取值范圍為0至6。如果要在圖像構(gòu)件中使用文件,可將“編輯類型”設(shè)為文件名,然后在“文件的名稱”中進(jìn)行設(shè)置。3.標(biāo)簽和加速鍵列表標(biāo)簽對應(yīng)gtk_label_new()函數(shù)的功能。“常規(guī)”選項卡內(nèi)“標(biāo)簽”文本框用于編輯顯示的文字,“對齊”下拉列表框用于定義對齊方式。加速鍵列表即快捷標(biāo)簽,對應(yīng)gtk_accel_label_new()函數(shù)的功能??旖萱I在“公共”選項卡,“加速鍵”文本框中設(shè)置。4.文本條目和文本視圖文本條目即文本框,對應(yīng)gtk_entry_new()函數(shù)的功能。文本視圖對應(yīng)gtk_text_view_new()函數(shù)的功能?!俺R?guī)”選項卡中,“可編輯”用于決定是否鎖定文本框,“可見狀態(tài)”用于設(shè)置是否顯示文本框中的文本,“文字”文本框中可設(shè)置初始文本。5.范圍構(gòu)件范圍構(gòu)件共有4種分別是水平比例、垂直比例、水平滾動條和垂直滾動條?!俺R?guī)”選項卡“調(diào)整部件”中可設(shè)置范圍構(gòu)件的屬性。6.組合框與組合框條目組合框?qū)?yīng)bo_box_new()函數(shù)的功能,組合框條目對應(yīng)bo_box_entry_new()函數(shù)的功能。后者比前者多出一個文本框子構(gòu)件。單擊“常規(guī)”選項卡內(nèi)“條目”文本框后的編輯框,其中可編輯需要顯示的條目,多個條目用回車鍵分隔。26.2.3添加構(gòu)件7.進(jìn)度條進(jìn)度條對應(yīng)gtk_progress_bar_new()函數(shù)的功能。進(jìn)度條已完成的進(jìn)度比例可在“常規(guī)”選項卡“完成比例”微調(diào)框中設(shè)置。8.樹視圖和圖標(biāo)視圖樹視圖對應(yīng)gtk_tree_view_new()函數(shù)的功能,圖標(biāo)視圖對應(yīng)gtk_icon_view_new()函數(shù)的功能。9.可移動的框可移動的框?qū)?yīng)gtk_handle_box_new()函數(shù)的功能。10.狀態(tài)欄狀態(tài)欄對應(yīng)gtk_statusbar_new()函數(shù)的功能。11.日歷日歷構(gòu)件對應(yīng)gtk_calendar_new()函數(shù)的功能,可在“常規(guī)”選項卡“年”、“月”、“日”微調(diào)框中設(shè)置默認(rèn)選中的。其中“月份”的取值范圍為0至11,如果“日”的值設(shè)為0則不指定具體天數(shù)。26.2.3添加構(gòu)件12.彈出式菜單彈出式菜單并不會直接在編輯區(qū)中顯示,添加后會列出在“容器”列表中??墒褂貌藛尉庉嬈鬟M(jìn)行編輯。13.水平分割條和垂直分割條水平分割條對應(yīng)gtk_hseparator_new()函數(shù)的功能,垂直分割條對應(yīng)gtk_vseparator_new()函數(shù)的功能。14.箭頭箭頭對應(yīng)gtk_arrow_new()函數(shù)的功能。箭頭的方向可在“常規(guī)”選項卡內(nèi)“箭頭方向”下拉列表框中設(shè)置。15.繪圖區(qū)域繪圖區(qū)域?qū)?yīng)gtk_drawing_area_new()函數(shù)的功能。16.最近選擇器最近選擇器對應(yīng)gtk_recent_chooser_widget_new()函數(shù)的功能。其設(shè)置方法與最近選擇對話框類似。17.文件選擇部件文件選擇部件對應(yīng)gtk_file_chooser_widget_new()函數(shù)的功能。其設(shè)置方法與文件選擇對話框類似。26.2.4設(shè)置構(gòu)件屬性在Glade中,界面構(gòu)件的屬性被分為3類,分別位于“常規(guī)”、“打包”、“公共”選項卡中。“常規(guī)”選項卡內(nèi)主要是構(gòu)件基本信息和特有的屬性?;拘畔ㄏ铝袃?nèi)容。類:構(gòu)件對應(yīng)GTK+庫的類名,該值不可修改。名稱:在程序中訪問構(gòu)件的名稱,添加構(gòu)件時Glade會為其自動指定一個?!按虬边x項卡用于設(shè)置構(gòu)件在容器中的位置,對于窗體和頂級容器不可用。其中屬性的設(shè)置如下。位置:如果上一級容器內(nèi)有多個單元格,那么第一個單元格的位置為0,依次類推。留空:用于設(shè)置構(gòu)件與上一級容器的上下間距。展開:用于設(shè)置是否展開界面構(gòu)件。填充:用于設(shè)置是否讓界面構(gòu)件占滿整個容器。包裹類型:可設(shè)置為“開始”或“結(jié)束”,用于定義界面裝入容器時的順序?!肮病边x項卡用于設(shè)置構(gòu)件的公共屬性,這些屬性均為GtkWidget類中定義的,因此可用于所有界面構(gòu)件。公共屬性的設(shè)置如下。寬度請求:設(shè)置構(gòu)件最小需求尺寸中寬度的數(shù)值。高度請求:設(shè)置構(gòu)件最小需求尺寸中高度的數(shù)值。26.2.4設(shè)置構(gòu)件屬性可見:設(shè)置構(gòu)件是否在界面中顯示出來。敏感:設(shè)置構(gòu)件是否接受用戶的輸入。工具提示:鼠標(biāo)光標(biāo)在構(gòu)件上方懸停時所顯示的文本,Glade會自動創(chuàng)建工具提示對象。不全部顯示:用于屏蔽gtk_widget_show_all()函數(shù)對該構(gòu)件的影響??衫L圖:設(shè)置應(yīng)用程序是否可以直接在此構(gòu)件上繪圖。接受焦點:設(shè)置構(gòu)件是否可以接受輸入焦點。對于按鈕類構(gòu)件,默認(rèn)為“是”;對于容器類構(gòu)件,默認(rèn)為“否”。有焦點:設(shè)置構(gòu)件是否已經(jīng)擁有輸入焦點,對于“接受焦點”設(shè)置為“是”的構(gòu)件有效。如果多個構(gòu)件設(shè)置為“是”,只有第一個有效。為焦點:設(shè)置構(gòu)件是否是頂級容器內(nèi)的聚焦部件。如果設(shè)置為“是”,當(dāng)構(gòu)件上一級容器獲得焦點時,那么焦點會落在該構(gòu)件上。對于“接受焦點”設(shè)置為“是”的構(gòu)件有效。如果多個構(gòu)件設(shè)置為“是”,只有第一個有效。26.2.4設(shè)置構(gòu)件屬性可成為默認(rèn):設(shè)置構(gòu)件是否可以成為默認(rèn)的構(gòu)件,用于接受Enter鍵的響應(yīng)。接受默認(rèn)動作:設(shè)置構(gòu)件在成為焦點時是否可以接受默認(rèn)動作,即對于空格鍵的響應(yīng)。對于“接受焦點”設(shè)置為“是”的構(gòu)件有效。如果多個構(gòu)件設(shè)置為“是”,只有第一個有效。事件:用于決定界面構(gòu)件可接受哪些GtkEvent事件類型的響應(yīng)。單擊其右側(cè)編輯按鈕,將彈出“選擇區(qū)域”對話框,可在其中“選擇獨立區(qū)域”列表中選擇需要響應(yīng)的事件。擴展事件:用于決定構(gòu)件可接受哪些擴展事件。有工具提示:用于決定是否顯示工具提示對象中的文本。工具提示標(biāo)記:工具提示對象顯示的文本,在“有工具提示”設(shè)置為“是”時顯示。工具提示文本:如果設(shè)置了“工具提示文本”,那么“工具提示標(biāo)記”將無效??旖萱I:用于設(shè)置構(gòu)件的快捷方式,單擊右側(cè)編輯按鈕將彈出“選擇快捷鍵”對話框,可在其中編輯多組快捷方式。26.2.5添加事件和回調(diào)Glade主界面的“信號”選項卡中可為界面構(gòu)件連接事件、信號和回調(diào)函數(shù)。所選構(gòu)件可用的事件將以該構(gòu)件對應(yīng)的類的繼承關(guān)系顯示信號。上圖是文本輸入框所對應(yīng)的信號。最底層為GObject類定義的信號,最頂層則是文本輸入框所屬的GtkEntry類定義的信號。單擊類名稱左側(cè)的展開器,將顯示出該類定義的所有信號。選擇信號名稱后,可為該信號連接回調(diào)函數(shù)和數(shù)據(jù),對應(yīng)g_signal_connect()函數(shù)的功能?;卣{(diào)函數(shù)可單擊對應(yīng)單元格中的下拉列表選擇?;卣{(diào)函數(shù)列表中的前2條函數(shù)是Glade根據(jù)構(gòu)件名稱命名的,其余為可用的GTK+函數(shù)。如果需要自定義回調(diào)函數(shù)名稱,可在單元格內(nèi)直接輸入。26.2.5添加事件和回調(diào)回調(diào)函數(shù)后可設(shè)置傳遞給回調(diào)函數(shù)的用戶數(shù)據(jù),該數(shù)據(jù)通常是回調(diào)函數(shù)中最后一個實際參數(shù)的名稱,可以為變量名或常量。如果回調(diào)函數(shù)并非GTK+中提供的函數(shù),那么回調(diào)函數(shù)的實現(xiàn)必須在具體C語言代碼中進(jìn)行,兩者使用的名稱必須一致。信號列表中有一項“之后”單選框,選擇后將使用g_signal_connect_after()函數(shù)連接信號與回調(diào)函數(shù)。當(dāng)為信號設(shè)置回調(diào)函數(shù)后,信號名的左側(cè)會多出一個展開器。如果需要為同一個信號連接更多的回調(diào)函數(shù),可單擊該展開器添加更多回調(diào)函數(shù)。26.3C語言代碼聯(lián)編Glade的項目文件是一個單獨的“.glade”文件,可通過GTK+庫將該項目文件添加到C語言源代碼中。這樣,就能在C語言編程寫的程序中直接使用Glade設(shè)計的用戶界面。本節(jié)將介紹GTK+庫使用Glade項目文件的方法。26.3.1GTK+庫使用Glade項目文件通過GTK+函數(shù)庫連接Glade項目文件至少包含兩個步驟,這些工作必須在GTK+庫初始化后,且沒有進(jìn)入GTK+主循環(huán)時完成。步驟如下:(1)創(chuàng)建GtkBuilder對象。GtkBuilder對象是用于動態(tài)加載XML格式用戶界面的類型,可使用gtk_builder_new()函數(shù)創(chuàng)建。它的一般形式為:GtkBuilder對象名;對象名=glade_xml_new();gtk_builder_add_from_file(GtkBuilder*builder,
constgchar*filename,
GError**error);其中,builder參數(shù)為glade_xml_new()執(zhí)行后創(chuàng)建的對象。filename參數(shù)為Glade項目文件的路徑和名稱。error參數(shù)為函數(shù)執(zhí)行錯誤后返回錯誤信息,NULL表示使用默認(rèn)錯誤機制。26.3.1GTK+庫使用Glade項目文件(2)獲得界面構(gòu)件??蓮挠行У腉tkBuilder對象中獲得界面構(gòu)件,然后對其進(jìn)行操作。至少要獲得頂層窗體構(gòu)件,然后使用GTK+函數(shù)將其顯示出來。gtk_builder_get_object()函數(shù)用于獲得界面構(gòu)件,它的一般形式為:gtk_builder_get_object(GtkBuilder*builder,
constgchar*name);builder參數(shù)為GtkBuilder對象的名稱,name參數(shù)為Glade項目中界面構(gòu)件的名稱。函數(shù)返回值是GtkWidget對象。(3)連接信號。在Glade中定義了信號后,可使用gtk_builder_connect_signals()函數(shù)將這些信號全部連接到C語言代碼中。它的一般形式為:voidgtk_builder_connect_signals(GtkBuilder*builder,
gpointeruser_data);其中,user_data參數(shù)為用戶自定義的信號,通常這個參數(shù)為NULL。26.3.1GTK+庫使用Glade項目文件下面用一個例子說明GTK+函數(shù)庫使用Glade項目文件的基本操作方法,首先在Glade里創(chuàng)建一個名為ui.glade的項目文件。然后在項目文件中添加一個窗體構(gòu)件,并在其中裝入一個縱向組裝盒、一個標(biāo)簽構(gòu)件和一個按鈕構(gòu)件。將窗體命名為MainWindow,標(biāo)簽命名為label。在“常規(guī)”選項卡內(nèi)將按鈕的“配置按鈕內(nèi)容”屬性設(shè)為“庫存按鈕”,將“庫存按鈕”屬性設(shè)為“退出(Q)”。然后為窗體構(gòu)件連接信號。選擇窗體,單擊“信號”選項卡。找到信號列表中GtkWidget項,單擊左側(cè)展開器,展開GtkWidget類中定義的信號。選擇delete-event信號,為其添加回調(diào)函數(shù)gtk_main_quit,如圖26.45所示。26.3.1GTK+庫使用Glade項目文件選擇按鈕構(gòu)件,選擇“信號”選項卡。找到信號列表中GtkButton項,單擊左側(cè)展開器,展開GtkButton類中定義的信號。選擇clicked信號,為其添加回調(diào)函數(shù)gtk_main_quit。保存Glade項目文件。在上述Glade項目文件同一個目錄中建立一個C語言源代碼文件,可以使用任意文件名。編輯該文件,寫入如下代碼:在編譯參數(shù)中加入編譯參數(shù)“`pkg-config--cflags--libsgtk+-3.0`-export-dynamic”,編譯該程序。編譯成功后運行程序,如圖26.46所示。程序中使用gtk_builder_add_from_file()函數(shù)讀取Glade項目文件ui.glade,創(chuàng)建了一個GtkBuilder對象。然后通過gtk_builder_get_object()函數(shù)獲得了Glade項目中的window和label構(gòu)件。程序運行時,修改了標(biāo)簽label的字符串,并使用gtk_widget_show_all()函數(shù)將窗體構(gòu)件window內(nèi)的所有構(gòu)件顯示出來。Glade項目中為window和button構(gòu)件所連接的信號在執(zhí)行g(shù)tk_builder_connect_signals()函數(shù)后即可被程序所使用。所以單擊窗體的關(guān)閉按鈕,或者按下“退出”按鈕時,將調(diào)用gtk_main_quit()函數(shù)結(jié)束程序。26.3.2使用GTK+多語言支持Linux系統(tǒng)本身具備完善的多語言支持體系,可使同一個可執(zhí)行文件擁有不同地方語言的圖形界面。這其中涉及到兩個重要概念:國際化與本地化。國際化是指將開發(fā)者原先使用的母語翻譯成多種其它的語言。由于實現(xiàn)翻譯的途徑、翻譯的工作效率、翻譯的可重用性等因素各不相同,使翻譯工作面臨很大困境,也阻礙了軟件的推廣和應(yīng)用。為了方便地將軟件翻譯成不同語言的版本,就需要一套翻譯規(guī)范和通用工具,于是就誕生了i18n工具集。i18n即“internationalization”的縮寫形式,主要使用gettext軟件包實現(xiàn)國際化支持。本地化是指可執(zhí)行文件能夠根據(jù)當(dāng)前的語言環(huán)境選擇圖形界面上使用的語言。除語言以外,字符編碼、語法、度量單位、日期時間格式、閱讀習(xí)慣、使用習(xí)慣等也是需要考慮的問題,因此設(shè)計了l10n工具集。l10n是localization的縮寫形式,主要使用locale軟件包實現(xiàn)本地化支持。在概念中,本地化包含國際化,兩者相輔相成。本節(jié)假設(shè)開發(fā)者的母語為英語,本地應(yīng)用為簡體中文,演示libglade對多語言的支持。下面是具體操作步驟:26.3.2使用GTK+多語言支持1.為Glade項目創(chuàng)建po和mo文件po文件意為可移植對象;mo文件意為機器對象。po文件是面向翻譯人員、提取于Glade項目的一種資源文件。當(dāng)軟件升級的時候,通過使用gettext軟件包處理po文件,可以在一定程度上使翻譯成果得以繼承,減輕翻譯人員的負(fù)擔(dān)。mo文件是面向計算機的、由po文件通過gettext軟件包編譯而成的二進(jìn)制文件。程序通過讀取mo文件使自身的界面轉(zhuǎn)換成用戶使用的語言。假設(shè)已建立了一個Glade項目文件ui.glade,其中包含一個主窗體window,窗體標(biāo)題為UserInformation。窗體中放置著一個表格容器,然后在容器中裝入一組標(biāo)簽構(gòu)件,構(gòu)件的標(biāo)簽分別是Name、Gender和Age。再將標(biāo)簽為Male和Female的單選按鈕裝入表格。最后裝入一個文本框、一個微調(diào)按鈕和一組按鈕庫按鈕。在包含Glade項目文件的目錄中創(chuàng)建名為po的目錄,進(jìn)入po目錄,創(chuàng)建一個名為POTFILES.in的新文件。用文本編輯器打開該文件,輸入Glade項目文件的文件名后保存,如下所示:ui.glade安裝intltool工具集,其中包含了gettext軟件包。在終端中輸入下列命令:apt-getinstallintltool安裝后,將工作目錄設(shè)為“POTFILES.in”文件的目錄。輸入下列命令創(chuàng)建po文件:intltool-update--potgettext-package=ui26.3.2使用GTK+多語言支持gettext-package參數(shù)的名稱為Glade項目文件的前綴名。命令執(zhí)行成功時會創(chuàng)建untitled.pot文件,該文件是po文件的模板。復(fù)制該文件,創(chuàng)建名為zh_CN.po的副本。用文本編輯器打開該文件進(jìn)行,將charset=CHARSET改為utf-8,將msgi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度恒溫恒濕儲藏室建設(shè)與維護合同3篇
- 2025年度影視制作車輛借用及拍攝服務(wù)合同2篇
- 領(lǐng)導(dǎo)干部談心談話記錄
- 2024年質(zhì)押借款補充合同模板
- 2024收銀員崗位技能提升及入職培訓(xùn)合同3篇
- 不銹鋼建筑安裝工程承攬協(xié)議版B版
- 2024年軟件開發(fā)購買合同
- 2024智能家居弱電裝修系統(tǒng)合同
- 2024年度特制版權(quán)轉(zhuǎn)讓協(xié)議(專業(yè)版)
- 專業(yè)化集裝箱物流配送服務(wù)協(xié)議2024版B版
- 高速公路收費站員工年度考評辦法
- 【課件】跨學(xué)科實踐:探索廚房中的物態(tài)變化問題-人教版八年級上冊物理
- 房地產(chǎn)企業(yè)崗位招聘筆試題題庫之四(含答案)營銷副總經(jīng)理
- 名著導(dǎo)讀《儒林外史》閱讀周計劃 統(tǒng)編版語文九年級下冊
- 某集團下屬子公司年度經(jīng)營績效管理辦法全套
- 2024年天津市中考?xì)v史試卷真題(含答案逐題解析)
- DL∕T 681.1-2019 燃煤電廠磨煤機耐磨件技術(shù)條件 第1部分:球磨機磨球和襯板(代替DLT 681-2012)
- AQ/T 1121-2023 煤礦安全現(xiàn)狀評價實施細(xì)則(正式版)
- 四川省成都市青白江區(qū)2023-2024學(xué)年八年級下學(xué)期期末數(shù)學(xué)試題(含答案詳解)
- 骨科中醫(yī)護理方案培訓(xùn)計劃(2篇)
- 2024年美國X射線熒光光譜儀(XRF)市場現(xiàn)狀及上下游分析報告
評論
0/150
提交評論