中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

圖躍網(wǎng)站建設(shè)國(guó)外網(wǎng)站開發(fā)

圖躍網(wǎng)站建設(shè),國(guó)外網(wǎng)站開發(fā),網(wǎng)站備案省份,大連建設(shè)工程信息網(wǎng)下載中心GtkExpression是一種基本類型。它不是GObject的后代。GtkExpression提供了一種描述對(duì)值的引用的方法。GtkExpression需要求值才能獲得值。 它類似于算術(shù)計(jì)算。 1 2 3 12是一個(gè)表達(dá)式。給出了計(jì)算的方法。3是來(lái)自表達(dá)式的值。求值是計(jì)算表達(dá)式并得到值。 GtkExpression是一種…

GtkExpression是一種基本類型。它不是GObject的后代。GtkExpression提供了一種描述對(duì)值的引用的方法。GtkExpression需要求值才能獲得值。

它類似于算術(shù)計(jì)算。

1 + 2 = 3

1+2是一個(gè)表達(dá)式。給出了計(jì)算的方法。3是來(lái)自表達(dá)式的值。求值是計(jì)算表達(dá)式并得到值。

GtkExpression是一種獲取值的方法。Evaluation類似于計(jì)算。值是通過(guò)計(jì)算表達(dá)式得到的。

Constant expression

常量表達(dá)式(GtkConstantExpression)在求值時(shí)提供常量值或?qū)嵗?/p>

  GValue value = G_VALUE_INIT;expression = gtk_constant_expression_new (G_TYPE_INT,100);gtk_expression_evaluate (expression, NULL, &value);
  • GtkExpression使用GValue來(lái)保存一個(gè)值。GValue是一個(gè)保存類型和值的結(jié)構(gòu)體和容器。它必須首先用G_VALUE_INIT初始化。注意,value是結(jié)構(gòu)體,而不是指向結(jié)構(gòu)體的指針。
  • 常量表達(dá)式用gtk_constant_expression_new函數(shù)創(chuàng)建。函數(shù)的參數(shù)是一個(gè)類型(GType)和一個(gè)值(或?qū)嵗?。這個(gè)表達(dá)式保存一個(gè)常量值。G_TYPE_INT是注冊(cè)到類型系統(tǒng)的類型。整數(shù)類型。下表列出了一些類型。
  • gtk_expression_evaluate計(jì)算表達(dá)式的值。它有三個(gè)參數(shù):要求值的表達(dá)式、這個(gè)實(shí)例和一個(gè)指向GValue的指針。對(duì)于常量表達(dá)式來(lái)說(shuō),這個(gè)實(shí)例不是必需的。因此,第二個(gè)參數(shù)是NULL。如果成功計(jì)算表達(dá)式,gtk_expression_evaluate返回TRUE。否則返回FALSE。
  • 如果返回TRUE,則用表達(dá)式的值設(shè)置GValue的值。值的類型是int。

請(qǐng)?zhí)砑訄D片描述
src/expression目錄下有一個(gè)示例程序exp_constant_simple.c。

  • 9 .創(chuàng)建常量表達(dá)式。它保存一個(gè)int值100。變量表達(dá)式指向表達(dá)式。
  • 11-14:對(duì)表達(dá)式求值。如果成功,將值顯示給stdout。否則顯示錯(cuò)誤消息。
  • 15-16:釋放表達(dá)式并取消設(shè)置GValue。

常量表達(dá)式通常用于將常量值或?qū)嵗x給另一個(gè)表達(dá)式。

Property expression

屬性表達(dá)式(GtkPropertyExpression)在GObject實(shí)例中查找屬性。例如,引用GtkLabel對(duì)象中的“l(fā)abel”屬性的屬性表達(dá)式是這樣創(chuàng)建的。

expression = gtk_property_expression_new (GTK_TYPE_LABEL, another_expression, "label");

第二個(gè)形參another_expression是:

  • 在求值時(shí)給出GtkLabel實(shí)例的表達(dá)式。
  • NULL.當(dāng)給定NULL時(shí),求值時(shí)會(huì)給出一個(gè)GtkLabel實(shí)例。這個(gè)實(shí)例被稱為這個(gè)對(duì)象。

例如,

label = gtk_label_new ("Hello");
another_expression = gtk_constant_expression_new (GTK_TYPE_LABEL, label);
expression = gtk_property_expression_new (GTK_TYPE_LABEL, another_expression, "label");

如果expression被求值,第二個(gè)參數(shù)another_expression會(huì)被提前求值。another_expression的值是標(biāo)簽(GtkLabel實(shí)例)。然后,expression查找標(biāo)簽的"label"屬性和求值結(jié)果"Hello"。

在上面的例子中,gtk_property_expression_new的第二個(gè)參數(shù)是另一個(gè)表達(dá)式。但是第二個(gè)參數(shù)可以是NULL。如果為NULL,則使用這個(gè)實(shí)例。這由gtk_expression_evaluate函數(shù)給出。

在src/expression目錄下有一個(gè)簡(jiǎn)單的程序exp_property_simple.c。

 1 #include <gtk/gtk.h>2 3 int4 main (int argc, char **argv) {5   GtkWidget *label;6   GtkExpression *expression;7   GValue value = G_VALUE_INIT;8 9   gtk_init ();
10   label = gtk_label_new ("Hello world.");
11   /* Create an expression */
12   expression = gtk_property_expression_new (GTK_TYPE_LABEL, NULL, "label");
13   /* Evaluate the expression */
14   if (gtk_expression_evaluate (expression, label, &value))
15     g_print ("The value is %s.\n", g_value_get_string (&value));
16   else
17     g_print ("The constant expression wasn't evaluated correctly.\n");
18   gtk_expression_unref (expression);
19   g_value_unset (&value);
20 
21   return 0;
22 }
  • 9-10: gtk_init初始化GTK GUI工具包。這通常是不必要的,因?yàn)镚tkApplication默認(rèn)的啟動(dòng)處理程序會(huì)進(jìn)行初始化。一個(gè)GtkLabel實(shí)例被創(chuàng)建為"Hello world."。
  • 12:創(chuàng)建屬性表達(dá)式。它看起來(lái)像一個(gè)GtkLabel實(shí)例的“l(fā)abel”屬性。但在創(chuàng)建時(shí),沒(méi)有給出實(shí)例,因?yàn)榈诙€(gè)參數(shù)是NULL。該表達(dá)式只知道如何從給定future的GtkLabel實(shí)例中獲取屬性。
  • 14-17:函數(shù)gtk_expression_evaluate使用this實(shí)例標(biāo)簽來(lái)計(jì)算表達(dá)式。結(jié)果保存在GValue值中。函數(shù)g_value_get_string從GValue中獲取一個(gè)字符串。但是字符串屬于GValue,所以不能釋放字符串。
  • 18-19:釋放表達(dá)式并取消設(shè)置GValue。與此同時(shí),GValue中的字符串被釋放。

如果gtk_property_expression_new的第二個(gè)參數(shù)不是NULL,那么它就是另一個(gè)表達(dá)式。該表達(dá)式由新創(chuàng)建的屬性表達(dá)式擁有。所以,當(dāng)表達(dá)式無(wú)用時(shí),你只需釋放最后一個(gè)表達(dá)式。然后釋放它擁有的另一個(gè)表達(dá)式。

Clousure expression

閉包表達(dá)式在計(jì)算閉包時(shí)調(diào)用閉包。閉包是回調(diào)函數(shù)(一個(gè)指向函數(shù)的指針)的通用表示。有關(guān)閉包的信息,請(qǐng)參閱GObject API參考——GObject消息系統(tǒng)。在src/expression目錄下有一些簡(jiǎn)單的閉包示例文件closure.c和closure_each.c。

有兩種閉包表達(dá)式,GtkCClosureExpression 和GtkClosureExpression。它們分別對(duì)應(yīng)于GCClosure和GClosure。當(dāng)你用C語(yǔ)言編程時(shí),GtkCClosureExpression和GCClosure是合適的。

閉包表達(dá)式是用gtk_closure_expression_new函數(shù)創(chuàng)建的。

GtkExpression *
gtk_cclosure_expression_new (GType value_type,GClosureMarshal marshal,guint n_params,GtkExpression **params,GCallback callback_func,gpointer user_data,GClosureNotify user_destroy);
  • value_type是求值時(shí)值的類型。
  • marshal就是marshaller。你可以賦值NULL。如果它是NULL,那么g_cclosure_marshal_generic()被用作marshaller。它是一個(gè)通過(guò)libffi實(shí)現(xiàn)的通用marshaller函數(shù)。
  • n_params是參數(shù)的數(shù)目。
  • params指出了回調(diào)函數(shù)中每個(gè)參數(shù)的表達(dá)式。
  • callback_func是一個(gè)回調(diào)函數(shù)。它被給出了這個(gè)參數(shù)和上面的參數(shù)。因此,如果n_params為3,則函數(shù)的參數(shù)數(shù)量為4。(this和params。見(jiàn)下文)。
  • user_data是用戶數(shù)據(jù)。你可以把它添加到閉包中。它類似于g_signal_connect中的user_data。如果沒(méi)有必要,則賦值NULL。
  • user_destroy是user_data的銷毀通知。在不再需要user_data時(shí),調(diào)用該函數(shù)銷毀它。如果將NULL賦值給user_data,也將NULL賦值給user_destroy。

回調(diào)函數(shù)的格式如下。

C-type
callback (this, param1, param2, …)

int
callback (GObject *object, int x, const char *s)
  • 3-11:回調(diào)函數(shù)。這個(gè)參數(shù)只有一個(gè),而且是一個(gè)this對(duì)象。它是一個(gè)GtkLabel,其標(biāo)簽被假定為"(number)+(number)"。
  • 8-10:從標(biāo)簽中檢索兩個(gè)整數(shù),并返回它們的和。此函數(shù)沒(méi)有錯(cuò)誤報(bào)告。如果要返回錯(cuò)誤報(bào)告,將返回值類型更改為指向gboolean和integer結(jié)構(gòu)的指針。一個(gè)表示誤差,另一個(gè)表示求和。gtk_cclosure_expression_new的第一個(gè)參數(shù)是G_TYPE_POINTER。在src/expression目錄下有一個(gè)示例程序exp_closure_with_error_report。
  • 19: gtk_init初始化GTK。這對(duì)于GtkLabel是必要的。
  • 20:創(chuàng)建一個(gè)“123+456”的GtkLabel實(shí)例。
  • 21:實(shí)例具有浮動(dòng)引用。它變成了一個(gè)普通的引用計(jì)數(shù)。
  • 22-23:創(chuàng)建閉包表達(dá)式。它的返回值類型是G_TYPE_INT,沒(méi) 有參數(shù)或“this”對(duì)象。
  • 24:將標(biāo)簽作為this對(duì)象來(lái)計(jì)算表達(dá)式。
  • 25:如果計(jì)算成功,顯示“123+456”的和。它是579。
  • 27:如果失敗,顯示錯(cuò)誤信息。
  • 28-30:釋放expression和標(biāo)簽。重置該值。

閉包表達(dá)式比其他類型的表達(dá)式更靈活,因?yàn)槟憧梢灾付ㄗ约旱幕卣{(diào)函數(shù)。

GtkExpressionWatch

GtkExpressionWatch是一個(gè)結(jié)構(gòu)體,而不是對(duì)象。它表示一個(gè)被監(jiān)視的gtk表達(dá)式。兩個(gè)函數(shù)創(chuàng)建了GtkExpressionWatch結(jié)構(gòu)。

gtk_expression_bind function

這個(gè)函數(shù)將目標(biāo)對(duì)象的屬性綁定到表達(dá)式上。如果表達(dá)式的值改變了,屬性會(huì)立即反映這個(gè)值。

GtkExpressionWatch*
gtk_expression_bind (GtkExpression* self,GObject* target,const char* property,GObject* this_
)

這個(gè)函數(shù)接受表達(dá)式的所有權(quán)。因此,如果你想擁有表達(dá)式,可以調(diào)用gtk_expression_ref()來(lái)增加表達(dá)式的引用計(jì)數(shù)。當(dāng)它沒(méi)用的時(shí)候,你應(yīng)該取消引用。如果你不擁有這個(gè)表達(dá)式,你就不在乎釋放這個(gè)表達(dá)式。
在這里插入圖片描述

一個(gè)exp_bind.c和exp_bind的例子。UI位于src/expression目錄中。

它包括一個(gè)label和一個(gè)scale。如果向右移動(dòng)滑塊,scale值會(huì)增加,標(biāo)簽上的數(shù)字也會(huì)增加。同樣地,如果向左移動(dòng),標(biāo)簽上的數(shù)字就會(huì)減少。標(biāo)簽通過(guò)調(diào)整綁定到scale值上。

 1 <?xml version='1.0' encoding='UTF-8'?>2 <interface>3   <object class='GtkApplicationWindow' id='win'>4     <property name='default-width'>600</property>5     <child>6       <object class='GtkBox'>7         <property name='orientation'>GTK_ORIENTATION_VERTICAL</property>8         <child>9           <object class='GtkLabel' id='label'>
10             <property name="label">10</property>
11           </object>
12         </child>
13         <child>
14           <object class='GtkScale'>
15             <property name='adjustment'>
16               <object class='GtkAdjustment' id='adjustment'>
17                 <property name='upper'>20.0</property>
18                 <property name='lower'>0.0</property>
19                 <property name='value'>10.0</property>
20                 <property name='step-increment'>1.0</property>
21                 <property name='page-increment'>5.0</property>
22                 <property name='page-size'>0.0</property>
23               </object>
24             </property>
25             <property name='digits'>0</property>
26             <property name='draw-value'>true</property>
27             <property name='has-origin'>true</property>
28             <property name='round-digits'>0</property>
29           </object>
30         </child>
31       </object>
32     </child>
33   </object>
34 </interface>

ui文件描述了以下父子關(guān)系。

GtkApplicationWindow (win) -- GtkBox -+- GtkLabel (label)+- GtkScale

定義了4個(gè)GtkScale屬性。

  • adjustment。GtkAdjustment提供如下功能。
    • upper and lower:scle的范圍。
    • value:scale的當(dāng)前值。它反映了scale的當(dāng)前值。
    • step increment and page increment:當(dāng)用戶按箭頭鍵或頁(yè)面上/下鍵時(shí),縮放比例分別以 step increment和page increment的方式移動(dòng)。
    • page-size:當(dāng)與比例一起使用時(shí),page-size為0。
  • digits:數(shù)值中顯示的小數(shù)位數(shù)。
  • draw-value:值是否顯示。
  • has-origin:標(biāo)尺是否有原點(diǎn)。如果它為真,則在原點(diǎn)和當(dāng)前點(diǎn)之間出現(xiàn)橙色條。
  • round-digits:數(shù)值發(fā)生變化時(shí)舍入的位數(shù)。例如,如果它為0,則滑塊移動(dòng)到一個(gè)整數(shù)點(diǎn)。
 1 #include <gtk/gtk.h>
2 
3 GtkExpressionWatch *watch;
4 
5 static int
6 f2i (GObject *object, double d) {
7   return (int) d;
8 }
9 
10 static int
11 close_request_cb (GtkWindow *win) {
12   gtk_expression_watch_unwatch (watch);
13   return false;
14 }
15 
16 static void
17 app_activate (GApplication *application) {
18   GtkApplication *app = GTK_APPLICATION (application);
19   gtk_window_present (gtk_application_get_active_window(app));
20 }
21 
22 static void
23 app_startup (GApplication *application) {
24   GtkApplication *app = GTK_APPLICATION (application);
25   GtkBuilder *build;
26   GtkWidget *win, *label;
27   GtkAdjustment *adjustment;
28   GtkExpression *expression, *params[1];
29 
30   /* Builds a window with exp.ui resource */
31   build = gtk_builder_new_from_file ("exp_bind.ui");
32   win = GTK_WIDGET (gtk_builder_get_object (build, "win"));
33   label = GTK_WIDGET (gtk_builder_get_object (build, "label"));
34   // scale = GTK_WIDGET (gtk_builder_get_object (build, "scale"));
35   adjustment = GTK_ADJUSTMENT (gtk_builder_get_object (build, "adjustment"));
36   gtk_window_set_application (GTK_WINDOW (win), app);
37   g_signal_connect (win, "close-request", G_CALLBACK (close_request_cb), NULL);
38   g_object_unref (build);
39 
40   /* GtkExpressionWatch */
41   params[0] = gtk_property_expression_new (GTK_TYPE_ADJUSTMENT, NULL, "value");
42   expression = gtk_cclosure_expression_new (G_TYPE_INT, NULL, 1, params, G_CALLBACK (f2i), NULL, NULL);
43   watch = gtk_expression_bind (expression, label, "label", adjustment); /* watch takes the ownership of the expression. */
44 }
45 
46 #define APPLICATION_ID "com.github.ToshioCP.exp_watch"
47 
48 int
49 main (int argc, char **argv) {
50   GtkApplication *app;
51   int stat;
52 
53   app = gtk_application_new (APPLICATION_ID, G_APPLICATION_DEFAULT_FLAGS);
54 
55   g_signal_connect (app, "startup", G_CALLBACK (app_startup), NULL);
56   g_signal_connect (app, "activate", G_CALLBACK (app_activate), NULL);
57 
58   stat =g_application_run (G_APPLICATION (app), argc, argv);
59   g_object_unref (app);
60   return stat;
61 }
  • 41-42:定義兩個(gè)表達(dá)式。一個(gè)是屬性表達(dá)式,另一個(gè)是閉包表達(dá)式。屬性表達(dá)式查找調(diào)整實(shí)例的“value”屬性。閉包表達(dá)式只是將double轉(zhuǎn)換為整數(shù)。
  • 43: gtk_expression_bind將GtkLabel實(shí)例的label屬性綁定到閉包表達(dá)式返回的整數(shù)上。它創(chuàng)建了一個(gè)GtkExpressionWatch結(jié)構(gòu)。綁定在watch生命周期內(nèi)工作。當(dāng)窗口被銷毀時(shí),scale和adjustment也被破壞。watch識(shí)別出expression變化的value,并試圖改變標(biāo)簽的屬性。顯然,這不是正確的行為。在窗戶被破壞之前,watch應(yīng)該無(wú)人看管。
  • 37:將窗口上的“關(guān)閉請(qǐng)求”信號(hào)連接到處理程序close_request_cb。這個(gè)信號(hào)在單擊關(guān)閉按鈕時(shí)發(fā)出。處理程序在窗口關(guān)閉前被調(diào)用?,F(xiàn)在正是讓GtkExpressionWatch無(wú)人觀看的好時(shí)機(jī)。
  • 10-14:“close-request”信號(hào)處理程序。Gtk_expression_watch_unwatch (watch)使手表停止觀察表達(dá)式。它釋放表達(dá)式并在其中調(diào)用gtk_expression_watch_unref (watch)。

如果您想將屬性綁定到表達(dá)式,gtk_expression_bind是最佳選擇。你可以用gtk_expression_watch函數(shù)來(lái)實(shí)現(xiàn),但它不太適合。

gtk_expression_watch function

Gtkexpression in ui files

Conversion between GValues

http://www.risenshineclean.com/news/863.html

相關(guān)文章:

  • seo網(wǎng)站推廣優(yōu)化站長(zhǎng)工具綜合查詢官網(wǎng)
  • 網(wǎng)站建設(shè)公司怎么賺錢網(wǎng)絡(luò)宣傳推廣
  • php與dw怎么做校園網(wǎng)站seo教程
  • 備案期間怎么做網(wǎng)站十大搜索引擎
  • 寧波網(wǎng)站建設(shè) 熊掌號(hào)服務(wù)營(yíng)銷策略
  • be設(shè)計(jì)網(wǎng)站自己開發(fā)網(wǎng)站
  • 時(shí)尚字體設(shè)計(jì)網(wǎng)站網(wǎng)絡(luò)營(yíng)銷推廣的方式
  • 樂(lè)清網(wǎng)站建設(shè)公司網(wǎng)絡(luò)軟文營(yíng)銷案例3篇
  • 免費(fèi)網(wǎng)站建設(shè)加盟亞洲衛(wèi)星電視網(wǎng)參數(shù)表
  • 網(wǎng)站建設(shè) 中企動(dòng)力公司搭建網(wǎng)站的步驟和順序
  • 網(wǎng)站app開發(fā)平臺(tái)百度非企渠道開戶
  • 孝感網(wǎng)站開發(fā)的公司電話集客營(yíng)銷軟件
  • 攀枝花建設(shè)工程有限責(zé)任公司網(wǎng)站一元友情鏈接平臺(tái)
  • 池州專業(yè)網(wǎng)站建設(shè)谷歌搜索引擎鏡像
  • 網(wǎng)站設(shè)計(jì) 電子購(gòu)物網(wǎng)站設(shè)計(jì)網(wǎng)絡(luò)精準(zhǔn)推廣
  • 電商網(wǎng)站建設(shè)推廣企業(yè)網(wǎng)絡(luò)規(guī)劃設(shè)計(jì)方案
  • 網(wǎng)站建設(shè)的結(jié)論和體會(huì)百度推廣營(yíng)銷中心
  • 柳州正規(guī)網(wǎng)站制作公司發(fā)稿網(wǎng)
  • 牛街網(wǎng)站建設(shè)免費(fèi)網(wǎng)站推廣軟件哪個(gè)好
  • 電子書籍網(wǎng)站開發(fā)推廣鏈接點(diǎn)擊器網(wǎng)頁(yè)
  • 如何開一個(gè)微信公眾號(hào)seo顧問(wèn)合同
  • 昆明企業(yè)自助建站系統(tǒng)百度官網(wǎng)客服
  • 曹縣網(wǎng)站開發(fā)抓取關(guān)鍵詞的軟件
  • 虛擬幣挖礦網(wǎng)站開發(fā)新鄉(xiāng)seo網(wǎng)絡(luò)推廣費(fèi)用
  • 互聯(lián)網(wǎng)門戶網(wǎng)站世界比分榜
  • 網(wǎng)站建設(shè)目標(biāo)定位推廣排名seo
  • jsp網(wǎng)站seo優(yōu)化百度競(jìng)價(jià)推廣開戶多少錢
  • 百度海外視頻網(wǎng)站建設(shè)幽默軟文經(jīng)典案例300
  • 釣魚網(wǎng)站開發(fā)百度百度一下百度
  • 做安卓icon圖標(biāo)下載網(wǎng)站網(wǎng)站推廣優(yōu)化方法