[gtkmm-documentation: 23/31] translate appendix B.
- From: Kjell Ahlstedt <kjellahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtkmm-documentation: 23/31] translate appendix B.
- Date: Tue, 12 Jan 2021 15:40:35 +0000 (UTC)
commit e852f5639badcb4b54c231bab66b5fabac27c812
Author: CCTV-1 <script tar gz gmail com>
Date: Fri Jan 8 21:48:02 2021 +0800
translate appendix B.
docs/tutorial/zh_CN/zh_CN.po | 322 +++++++++++++++++++++++++++++++++++++++----
1 file changed, 299 insertions(+), 23 deletions(-)
---
diff --git a/docs/tutorial/zh_CN/zh_CN.po b/docs/tutorial/zh_CN/zh_CN.po
index adbd623..eaefc6a 100644
--- a/docs/tutorial/zh_CN/zh_CN.po
+++ b/docs/tutorial/zh_CN/zh_CN.po
@@ -13541,14 +13541,15 @@ msgstr ""
"æ™ºèƒ½æŒ‡é’ˆã€‚ä½ å¯èƒ½å¯¹<classname>std::unique_ptr<></classname>å’Œ"
"<classname>std::shared_ptr<></classname>å分熟悉,它们也是智能指针。在"
"<application>gtkmm</application>-4.0ä¸<classname>Glib::RefPtr<></"
-"classname>是<classname>std::shared_ptr<></classname>的别å。<classname>Glib::"
-"RefPtr<></classname>在C++æ ‡å‡†åº“è¿˜æ²¡æœ‰æ·»åŠ å¼•ç”¨è®¡æ•°æ™ºèƒ½æŒ‡é’ˆçš„æ—¶å€™å°±å·²ç»å˜"
-"在于<application>glibmm</application>了(译注:事实上Glib::RefPtr的行为与"
-"std::shared_ptr的行为并ä¸å®Œå…¨ä¸€è‡´ï¼Œä¸”å› glibmmç‰åº“的文档是由C文档直接生æˆè€Œ"
-"æ¥ï¼Œåœ¨ä¸€äº›C库ä¸å¯ä»¥æŽ¥å—NULL作为å‚数的函数在对应的C++绑定库ä¸çš„文档ä¸éƒ½æ˜¯å¯ä»¥"
-"接å—nullptr作为å‚数,但实际上并ä¸ä¸€å®šèƒ½æŽ¥å—nullptr作为å‚数,有时候需è¦ä¼ 递"
-"Glib::RefPtr<FOO>()ã€Gdk::Event()ã€ç©ºçš„å—符串ç‰ã€‚å‚è§ï¼š<ulink url=\"https://";
-"gitlab.gnome.org/GNOME/glibmm/-/issues/24\">问题24</ulink>)。"
+"classname>是<classname>std::shared_ptr<></classname>的别å。"
+"<classname>Glib::RefPtr<></classname>在C++æ ‡å‡†åº“è¿˜æ²¡æœ‰æ·»åŠ å¼•ç”¨è®¡æ•°æ™ºèƒ½"
+"指针的时候就已ç»å˜åœ¨äºŽ<application>glibmm</application>了(译注:事实上Glib::"
+"RefPtr的行为与std::shared_ptr的行为并ä¸å®Œå…¨ä¸€è‡´ï¼Œä¸”å› glibmmç‰åº“的文档是由Cæ–‡"
+"档直接生æˆè€Œæ¥ï¼Œåœ¨ä¸€äº›C库ä¸å¯ä»¥æŽ¥å—NULL作为å‚数的函数在对应的C++绑定库ä¸çš„æ–‡"
+"æ¡£ä¸éƒ½æ˜¯å¯ä»¥æŽ¥å—nullptr作为å‚数,但实际上并ä¸ä¸€å®šèƒ½æŽ¥å—nullptr作为å‚数,有时"
+"候需è¦ä¼ 递Glib::RefPtr<FOO>()ã€Gdk::Event()ã€ç©ºçš„å—符串ç‰ã€‚å‚è§ï¼š"
+"<ulink url=\"https://gitlab.gnome.org/GNOME/glibmm/-/issues/24\";>问题24</"
+"ulink>)。"
#: C/index-in.docbook:7966
msgid ""
@@ -13783,7 +13784,7 @@ msgstr ""
#: C/index-in.docbook:8095
msgid "Connecting signal handlers"
-msgstr ""
+msgstr "连接到信å·å¤„ç†å‡½æ•°"
#: C/index-in.docbook:8096
msgid ""
@@ -13796,10 +13797,16 @@ msgid ""
"<application>GTK</application> C coders, these signal handlers are often "
"named callbacks."
msgstr ""
+"<application>gtkmm</application>的部件类拥有信å·è®¿é—®å™¨æ–¹æ³•ï¼Œä¾‹å¦‚:"
+"<methodname>Gtk::Button::signal_clicked()</methodname>。这些方法å…è®¸ä½ å°†ä½ çš„"
+"ä¿¡å·å¤„ç†å‡½æ•°ä¸Žä¿¡å·ç›¸è¿žæŽ¥ã€‚<application>gtkmm</application>所使用的的"
+"<application>libsigc++</application>回调库æ供了éžå¸¸å¼ºçš„çµæ´»æ€§ï¼Œå®ƒå‡ 乎å…è®¸ä½ "
+"使用任何函数作为信å·çš„处ç†ç¨‹åºï¼Œä¸è¿‡é€šå¸¸ä½ 会希望使用类的æˆå‘˜å‡½æ•°ã€‚在"
+"<application>GTK</application>çš„C代ç ä¸ï¼Œè¿™äº›ä¿¡å·å¤„ç†ç¨‹åºè¢«ç§°ä¸ºå›žè°ƒã€‚"
#: C/index-in.docbook:8106
msgid "Here's an example of a signal handler being connected to a signal:"
-msgstr ""
+msgstr "这是将信å·å¤„ç†å‡½æ•°ä¸Žä¿¡å·ç›¸è¿žæŽ¥çš„示例:"
#: C/index-in.docbook:8111
#, no-wrap
@@ -13818,32 +13825,49 @@ msgid ""
" button.signal_clicked().connect(sigc::ptr_fun(&on_button_clicked));\n"
"}\n"
msgstr ""
+"\n"
+"#include <gtkmm/button.h>\n"
+"\n"
+"void on_button_clicked()\n"
+"{\n"
+" std::cout << \"Hello World\" << std::endl;\n"
+"}\n"
+"\n"
+"int main()\n"
+"{\n"
+" Gtk::Button button(\"Hello World\");\n"
+" button.signal_clicked().connect(sigc::ptr_fun(&on_button_clicked));\n"
+"}\n"
#: C/index-in.docbook:8127
msgid ""
"There's rather a lot to think about in this (non-functional) code. First "
"let's identify the parties involved:"
-msgstr ""
+msgstr "在æ¤ä»£ç (éžåŠŸèƒ½æ€§ï¼‰ä¸æœ‰å¾ˆå¤šäº‹æƒ…è¦è€ƒè™‘,首先让我们确定代ç 的行为:"
#: C/index-in.docbook:8135
msgid "The signal handler is <methodname>on_button_clicked()</methodname>."
-msgstr ""
+msgstr "ä¿¡å·å¤„ç†å‡½æ•°æ˜¯<methodname>on_button_clicked()</methodname>。"
#: C/index-in.docbook:8141
msgid ""
"We're hooking it up to the <classname>Gtk::Button</classname> object called "
"<varname>button</varname>."
msgstr ""
+"我们将其连接到一个å为<varname>button</varname>çš„<classname>Gtk::Button</"
+"classname>对象。"
#: C/index-in.docbook:8148
msgid ""
"When the Button emits its <literal>clicked</literal> signal, "
"<methodname>on_button_clicked()</methodname> will be called."
msgstr ""
+"当<varname>button</varname>å‘出<literal>clicked</literal>ä¿¡å·æ—¶ï¼Œ"
+"<methodname>on_button_clicked()</methodname>将被调用。"
#: C/index-in.docbook:8156
msgid "Now let's look at the connection again:"
-msgstr ""
+msgstr "现在,我们å†æ¬¡çœ‹ä¸€ä¸‹è¿žæŽ¥ï¼š"
#: C/index-in.docbook:8161
#, no-wrap
@@ -13853,6 +13877,10 @@ msgid ""
" button.signal_clicked().connect(sigc::ptr_fun(&on_button_clicked));\n"
" ...\n"
msgstr ""
+"\n"
+" ...\n"
+" button.signal_clicked().connect(sigc::ptr_fun(&on_button_clicked));\n"
+" ...\n"
#: C/index-in.docbook:8168
msgid ""
@@ -13861,6 +13889,10 @@ msgid ""
"method. Instead, we call <function>sigc::ptr_fun()</function>, and pass the "
"result to <methodname>connect()</methodname>."
msgstr ""
+"请注æ„,我们ä¸ä¼šç›´æŽ¥å°†ä¸€ä¸ªæŒ‡å‘<methodname>on_button_clicked()</methodname>çš„"
+"æŒ‡é’ˆä¼ é€’ç»™ä¿¡å·çš„<methodname>connect()</methodname>方法。我们将调用"
+"<function>sigc::ptr_fun()</function>å¹¶å°†å…¶è¿”å›žå€¼ä¼ é€’ç»™<methodname>connect()</"
+"methodname>。"
#: C/index-in.docbook:8175
msgid ""
@@ -13871,10 +13903,14 @@ msgid ""
"standalone function or static method. <function>sigc::mem_fun()</function> "
"generates a slot for a member method of a particular instance."
msgstr ""
+"<function>sigc::ptr_fun()</function>生æˆä¸€ä¸ª<classname>sigc::slot</"
+"classname>。槽对象看起æ¥å¾ˆåƒä¸€ä¸ªå‡½æ•°ï¼Œä½†å®žé™…上是一个对象。这类对象也被称为函"
+"数对象或是函å。<function>sigc::ptr_fun()</function>为独立函数或é™æ€æˆå‘˜å‡½æ•°"
+"生æˆæ§½ã€‚<function>sigc::mem_fun()</function>为特定实例的æˆå‘˜å‡½æ•°ç”Ÿæˆæ§½ã€‚"
#: C/index-in.docbook:8184
msgid "Here's a slightly larger example of slots in action:"
-msgstr ""
+msgstr "这是一个在动作ä¸ä½¿ç”¨æ§½çš„较大示例:"
#: C/index-in.docbook:8189
#, no-wrap
@@ -13896,12 +13932,29 @@ msgid ""
" button.signal_clicked().connect( sigc::mem_fun(some_object, &some_class::on_button_clicked) );\n"
"}\n"
msgstr ""
+"\n"
+"void on_button_clicked();\n"
+"\n"
+"class some_class\n"
+"{\n"
+" void on_button_clicked();\n"
+"};\n"
+"\n"
+"some_class some_object;\n"
+"\n"
+"int main()\n"
+"{\n"
+" Gtk::Button button;\n"
+" button.signal_clicked().connect( sigc::ptr_fun(&on_button_clicked) );\n"
+" button.signal_clicked().connect( sigc::mem_fun(some_object, &some_class::on_button_clicked) );\n"
+"}\n"
#: C/index-in.docbook:8208
msgid ""
"The first call to <methodname>connect()</methodname> is just like the one we "
"saw last time; nothing new here."
msgstr ""
+"第一个<methodname>connect()</methodname>调用与我们之å‰çœ‹åˆ°çš„没有什么区别。"
#: C/index-in.docbook:8211
msgid ""
@@ -13913,6 +13966,12 @@ msgid ""
"\"called\", call the pointed-to method of the specified object, in this case "
"<methodname>some_object.on_button_clicked()</methodname>."
msgstr ""
+"接下æ¥çš„一个调用更有趣些。使用两个å‚数调用<function>sigc::mem_fun()</"
+"function>。第一个å‚数是<parameter>some_object</parameter>,这是我们新的槽将指"
+"å‘的对象。第二个å‚数是指å‘å…¶æˆå‘˜å‡½æ•°ä¹‹ä¸€çš„指针。这个特定版本的"
+"<function>sigc::mem_fun()</function>将会创建一个槽,这个槽在被调用的时候将会"
+"调用指定对象上函数指针所指å‘çš„æˆå‘˜å‡½æ•°ï¼Œåœ¨è¿™ä¸ªæƒ…况下调用的是"
+"<methodname>some_object.on_button_clicked()</methodname>。"
#: C/index-in.docbook:8221
msgid ""
@@ -13921,6 +13980,9 @@ msgid ""
"perfectly fine - when the button is clicked, both signal handlers will be "
"called."
msgstr ""
+"å¦ä¸€ä¸ªä¸Žæ¤ç¤ºä¾‹æœ‰å…³çš„注æ„事项是,我们对åŒä¸€ä¸ªä¿¡å·å¯¹è±¡è°ƒç”¨äº†ä¸¤æ¬¡"
+"<methodname>connect()</methodname>。所以当该按钮被点击时,这两个信å·å¤„ç†å‡½æ•°"
+"都将被调用。"
#: C/index-in.docbook:8228
msgid ""
@@ -13931,10 +13993,14 @@ msgid ""
"function>, of course). Therefore, it's important to know what type of signal "
"handler you'll be expected to connect to a given signal."
msgstr ""
+"ä½ åº”è¯¥å·²ç»æ³¨æ„到了,按钮的<literal>clicked</literal>ä¿¡å·æœŸæœ›è°ƒç”¨ä¸€ä¸ªä¸æŽ¥å—ä»»"
+"何å‚数的函数。事实上所有的信å·éƒ½æœ‰è¿™æ ·çš„è¦æ±‚ã€‚æ‰€ä»¥ä½ ä¸èƒ½å°†ä¸€ä¸ªæŽ¥å—两个å‚æ•°çš„"
+"函数与期望所调用函数ä¸æŽ¥å—å‚æ•°çš„ä¿¡å·ç›¸å…³è”ï¼Œå½“ç„¶ä½ å¯ä»¥é€šè¿‡ä½¿ç”¨"
+"<function>sigc::bind()</function>之类的适é…器在一定程度上绕过这个é™åˆ¶ã€‚"
#: C/index-in.docbook:8240
msgid "Writing signal handlers"
-msgstr ""
+msgstr "编写信å·å¤„ç†å‡½æ•°"
#: C/index-in.docbook:8242
msgid ""
@@ -13943,6 +14009,9 @@ msgid ""
"example of a signal declaration you might see in the <application>gtkmm</"
"application> headers:"
msgstr ""
+"è¦æ‰¾åˆ°ä½ å¯ä»¥è¿žæŽ¥åˆ°ä¿¡å·çš„ä¿¡å·å¤„ç†å‡½æ•°ç±»åž‹ï¼Œä½ å¯ä»¥æŸ¥çœ‹å®ƒçš„å‚考文档或者是头文"
+"ä»¶ã€‚è¿™æ˜¯ä¸€ä¸ªä½ å¯èƒ½åœ¨<application>gtkmm</application>头文件ä¸çœ‹åˆ°çš„ä¿¡å·å£°æ˜Žç¤º"
+"例:"
#: C/index-in.docbook:8249
#, no-wrap
@@ -13950,6 +14019,8 @@ msgid ""
"\n"
"Glib::SignalProxy<bool(Gtk::DirectionType)> signal_focus()\n"
msgstr ""
+"\n"
+"Glib::SignalProxy<bool(Gtk::DirectionType)> signal_focus()\n"
#: C/index-in.docbook:8254
msgid ""
@@ -13960,12 +14031,18 @@ msgid ""
"first, and only, argument. By looking at the reference documentation, you "
"can see the names of the arguments too."
msgstr ""
+"除了信å·å为<literal>focus</literal>之外,这里的膜拜å‚数很é‡è¦ã€‚第一个å‚æ•°"
+"<type>bool</type>,表示信å·å¤„ç†å‡½æ•°çš„返回值应该是个<type>bool</type>类型。而"
+"括å·ä¸çš„<type>Gtk::DirectionType</type>表示信å·æ‰€æœŸæœ›è°ƒç”¨çš„函数的第一个也是唯"
+"一一个å‚数的类型。通过查看å‚è€ƒæ–‡æ¡£ä½ è¿˜å¯ä»¥çœ‹åˆ°å‚æ•°çš„å称。"
#: C/index-in.docbook:8263
msgid ""
"The same principles apply for signals which have more arguments. Here's one "
"with three (taken from <filename><gtkmm/textbuffer.h></filename>):"
msgstr ""
+"对于接å—期望调用的函数有更多å‚æ•°çš„ä¿¡å·ä¹Ÿæ˜¯ä¸€æ ·çš„阅读规则。以下声明å–自"
+"<filename><gtkmm/textbuffer.h></filename>:"
#: C/index-in.docbook:8269
#, no-wrap
@@ -13973,6 +14050,8 @@ msgid ""
"\n"
"Glib::SignalProxy<void(TextBuffer::iterator&, const Glib::ustrin&, int)> signal_insert();\n"
msgstr ""
+"\n"
+"Glib::SignalProxy<void(TextBuffer::iterator&, const Glib::ustrin&, int)> signal_insert();\n"
#: C/index-in.docbook:8274
msgid ""
@@ -13981,6 +14060,9 @@ msgid ""
"the argument types, in order. Our signal handler's prototype could look like "
"this:"
msgstr ""
+"ä»¥ä¸€æ ·çš„é˜…è¯»è§„åˆ™é˜…è¯»åŽå¯çŸ¥ï¼Œè¯¥ä¿¡å·æ‰€æœŸæœ›è°ƒç”¨çš„函数的返回值类型为<type>void</"
+"type>,括å·å†…三ç§ç±»åž‹ä¸ºå‡½æ•°çš„三个å‚数类型。所以我们的信å·å¤„ç†å‡½æ•°åŽŸåž‹å¯èƒ½å¦‚下"
+"所示:"
#: C/index-in.docbook:8282
#, no-wrap
@@ -13988,15 +14070,17 @@ msgid ""
"\n"
"void on_insert(TextBuffer::iterator& pos, const Glib::ustring& text, int bytes)\n"
msgstr ""
+"\n"
+"void on_insert(TextBuffer::iterator& pos, const Glib::ustring& text, int bytes)\n"
#: C/index-in.docbook:8289
msgid "Disconnecting signal handlers"
-msgstr ""
+msgstr "æ–开信å·å¤„ç†å‡½æ•°"
#: C/index-in.docbook:8291
msgid ""
"Let's take another look at a Signal's <literal>connect</literal> method:"
-msgstr ""
+msgstr "让我们å†æ¥çœ‹çœ‹ä¿¡å·çš„<literal>connect</literal>æˆå‘˜å‡½æ•°ï¼š"
#: C/index-in.docbook:8296
#, no-wrap
@@ -14004,6 +14088,8 @@ msgid ""
"\n"
"sigc::connection signal<void(int)>::connect(const sigc::slot<void(int)>&);\n"
msgstr ""
+"\n"
+"sigc::connection signal<void(int)>::connect(const sigc::slot<void(int)>&);\n"
#: C/index-in.docbook:8301
msgid ""
@@ -14012,10 +14098,13 @@ msgid ""
"associated signal handler using the <methodname>sigc::connection::"
"disconnect()</methodname> method."
msgstr ""
+"该函数返回的<classname>sigc::connection</classname>对象å¯ä»¥æŽ§åˆ¶è¿žæŽ¥ã€‚通过ä¿å˜"
+"连接对象就å¯ä»¥æ–开与其相关è”çš„ä¿¡å·å¤„ç†å‡½æ•°çš„è¿žæŽ¥ã€‚è‹¥ä½ æƒ³å¦‚æ¤åšï¼Œåªéœ€å¯¹å¯¹è±¡è°ƒ"
+"用<methodname>sigc::connection::disconnect()</methodname>æˆå‘˜å‡½æ•°å³å¯ã€‚"
#: C/index-in.docbook:8309
msgid "Overriding default signal handlers"
-msgstr ""
+msgstr "覆写默认信å·å¤„ç†å‡½æ•°"
#: C/index-in.docbook:8311
msgid ""
@@ -14023,6 +14112,8 @@ msgid ""
"the like by handling signals. That's certainly a good way to do things, but "
"it's not the only way."
msgstr ""
+"到现在为æ¢ï¼Œä½ å·²ç»å¦ä¼šäº†é€šè¿‡å°†è‡ªå®šä¹‰çš„ä¿¡å·å¤„ç†å‡½æ•°è¿žæŽ¥åˆ°ä¿¡å·æ¥å“应按钮按下ç‰"
+"动作。这是一ç§å¥½æ–¹æ³•ï¼Œä½†ä¸æ˜¯å”¯ä¸€çš„方法。"
#: C/index-in.docbook:8318
msgid ""
@@ -14031,6 +14122,8 @@ msgid ""
"override the default signal handler, such as Button::on_clicked(). This can "
"be a lot simpler than hooking up signal handlers for everything."
msgstr ""
+"ä½ è¿˜å¯ä»¥åˆ›å»ºä¸€ä¸ªä»Žéƒ¨ä»¶ç»§æ‰¿è€Œæ¥çš„新类,然åŽè¦†ç›–默认的信å·å¤„ç†å‡½æ•°ï¼ˆä¾‹å¦‚,"
+"Button::on_clicked()ï¼‰ï¼Œè¿™æ ·ä½ å°±å¯ä»¥çœåŽ»å°†ä¿¡å·å¤„ç†å‡½æ•°è¿žæŽ¥åˆ°ä¿¡å·çš„æ¥éª¤ã€‚"
#: C/index-in.docbook:8325
msgid ""
@@ -14041,6 +14134,10 @@ msgid ""
"handle the same signal, or if you want one signal handler to respond to the "
"same signal from different objects."
msgstr ""
+"å类化并ä¸æ˜¯é“¶å¼¹ã€‚它åªåœ¨ä½ åªå¸Œæœ›ç”±éƒ¨ä»¶è‡ªèº«æ¥å¤„ç†è‡ªå·±çš„ä¿¡å·æ—¶æ‰å¥½ç”¨ã€‚å¦‚æžœä½ éœ€"
+"è¦ç”¨å…¶ä»–çš„ç±»æ¥å¤„ç†ä¿¡å·ï¼Œä½ 还是需è¦ä¸ºæ¤å°†å‡½æ•°è¿žæŽ¥åˆ°ç›®æ ‡ä¿¡å·ä¸Šã€‚è¿™åœ¨ä½ éœ€è¦ç”¨å¤š"
+"个对象处ç†åŒä¸€ä¸ªä¿¡å·æˆ–者需è¦ä¸€ä¸ªä¿¡å·å¤„ç†å‡½æ•°å¤„ç†ä¸åŒçš„对象的信å·çš„时候会很ä¸"
+"方便。"
#: C/index-in.docbook:8330
msgid ""
@@ -14048,10 +14145,12 @@ msgid ""
"mind; they contain virtual member methods specifically intended to be "
"overridden."
msgstr ""
+"<application>gtkmm</application>类在设计的时候已ç»è€ƒè™‘到了覆写;它们包å«äº†ä¸“"
+"门用于被覆写的虚æˆå‘˜å‡½æ•°ã€‚"
#: C/index-in.docbook:8335
msgid "Let's look at an example of overriding:"
-msgstr ""
+msgstr "让我们看一个覆写的例å:"
#: C/index-in.docbook:8340
#, no-wrap
@@ -14073,6 +14172,22 @@ msgid ""
" Gtk::Button::on_clicked();\n"
"}\n"
msgstr ""
+"\n"
+"#include <gtkmm/button.h>\n"
+"\n"
+"class OverriddenButton : public Gtk::Button\n"
+"{\n"
+"protected:\n"
+" void on_clicked() override;\n"
+"}\n"
+"\n"
+"void OverriddenButton::on_clicked()\n"
+"{\n"
+" std::cout << \"Hello World\" << std::endl;\n"
+"\n"
+" // call the base class's version of the method:\n"
+" Gtk::Button::on_clicked();\n"
+"}\n"
#: C/index-in.docbook:8359
msgid ""
@@ -14085,6 +14200,12 @@ msgid ""
"<classname>Gtk::Button</classname> do what it would have done had we not "
"overridden."
msgstr ""
+"在这我们定义了一个å为<classname>OverriddenButton</classname>的新类,该类继承"
+"自<classname>Gtk::Button</classname>。我们对其唯一的更改是"
+"<methodname>on_clicked()</methodname>æˆå‘˜å‡½æ•°ï¼Œåªè¦<classname>Gtk::Button</"
+"classname>å‘出<literal>clicked</literal>ä¿¡å·è¯¥æˆå‘˜å‡½æ•°å°±ä¼šè¢«è°ƒç”¨ã€‚这个æˆå‘˜å‡½"
+"æ•°å°†å—符串\"Hello World\"打å°åˆ°<literal>stdout</literal>,然åŽè°ƒç”¨"
+"<classname>Gtk::Button</classname>已被覆写本该被调用的æˆå‘˜å‡½æ•°ã€‚"
#: C/index-in.docbook:8370
msgid ""
@@ -14097,10 +14218,14 @@ msgid ""
"with connected signal handlers: you can call the parent method in the "
"<emphasis>middle</emphasis> of your custom code."
msgstr ""
+"调用父方法ä¸æ˜¯å¿…é¡»çš„ï¼Œä½ å¯ä»¥åœ¨ä¸æƒ³åšçš„时候ä¸è°ƒç”¨å®ƒã€‚请注æ„在æ¤æˆ‘们在åšå®Œäº†æƒ³"
+"åšçš„事情<emphasis>之åŽ</emphasis>è°ƒç”¨äº†çˆ¶æ–¹æ³•ï¼Œè€Œä½ å½“ç„¶å¯ä»¥åœ¨æ¤å‡½æ•°çš„ä¸é—´æˆ–是"
+"ä»»ä½•ä½ æƒ³è°ƒç”¨çˆ¶æ–¹æ³•çš„ä½ç½®è°ƒç”¨å®ƒã€‚这对于通过连接到信å·è°ƒç”¨çš„ä¿¡å·å¤„ç†å‡½æ•°æ˜¯æ— 法"
+"åšåˆ°çš„。"
#: C/index-in.docbook:8384
msgid "Binding extra arguments"
-msgstr ""
+msgstr "绑定é¢å¤–å‚æ•°"
#: C/index-in.docbook:8391
#, no-wrap
@@ -14117,6 +14242,8 @@ msgid ""
"\n"
"void on_button_clicked(const Glib::ustring& data);\n"
msgstr ""
+"\n"
+"void on_button_clicked(const Glib::ustring& data);\n"
#: C/index-in.docbook:8385
msgid ""
@@ -14131,6 +14258,14 @@ msgid ""
"extra argument to the declaration of our signal handler: <_:programlisting-2/"
"> Of course, a normal \"clicked\" signal handler would have no arguments."
msgstr ""
+"å¦‚æžœä½ æƒ³ä½¿ç”¨ä¸€ä¸ªä¿¡å·å¤„ç†å‡½æ•°ä»Žå¤šä¸ªéƒ¨ä»¶æ•èŽ·åŒä¸€ä¸ªä¿¡å·ï¼Œä½ å¯èƒ½å¸Œæœ›ä¿¡å·å¤„ç†å‡½æ•°"
+"能收到一些é¢å¤–çš„ä¿¡æ¯ã€‚ä¾‹å¦‚ï¼Œä½ å¯èƒ½æƒ³çŸ¥é“é‚£ä¸ªæŒ‰é’®è¢«ç‚¹å‡»äº†ã€‚ä½ å¯ä»¥ä½¿ç”¨"
+"<function>sigc::bind()</function>。这是<link linkend=\"sec-"
+"helloworld2\">helloworld2</link>示例的部分代ç :<_:programlisting-1/> 这表示"
+"我们希望信å·å‘ä¿¡å·å¤„ç†å‡½æ•°å‘é€ä¸€ä¸ªé¢å¤–çš„<classname>Glib::ustring</classname>"
+"å‚数,并且该å‚数的值为\"button 1\"。当然,我们将会需è¦å‘ä¿¡å·å¤„ç†å‡½æ•°çš„声明ä¸"
+"æ·»åŠ é¢å¤–çš„å‚æ•°:<_:programlisting-2/>。当然,æ£å¸¸çš„\"clicked\"ä¿¡å·å¤„ç†å‡½æ•°æ˜¯æ²¡"
+"有å‚数的。"
#: C/index-in.docbook:8403
msgid ""
@@ -14143,10 +14278,18 @@ msgid ""
"widget, but widget derivation is very difficult in C. We have far less need "
"of this hack in <application>gtkmm</application>."
msgstr ""
+"<function>sigc::bind()</function>并ä¸å¸¸ç”¨ï¼Œä¸è¿‡å¶å°”ä¼šå¯¹ä½ æœ‰æ‰€å¸®åŠ©ï¼ˆè¯‘æ³¨ï¼šå¾ˆå¤š"
+"时候直接使用lambda比调用sigc::bindè¦å¥½ï¼‰ã€‚å¦‚æžœä½ å¯¹ä½¿ç”¨<application>GTK</"
+"application>编程很熟悉,就会注æ„到,这和<application>GTK</application>ä¸æ‰€æœ‰"
+"的回调函数都具有一个é¢å¤–çš„<literal>gpointer data</literal>å‚æ•°ååˆ†çš„ç±»ä¼¼ã€‚å› "
+"为在Cè¯è¨€ä¸è¦æ´¾ç”Ÿä¸€ä¸ªéƒ¨ä»¶å分的困难,通过让<application>GTK</application>ä¸æ‰€"
+"æœ‰å›žè°ƒå‡½æ•°éƒ½å…·æœ‰ä¸€ä¸ªè¿™æ ·çš„é¢å¤–å‚æ•°ç”¨äºŽä¼ é€’æœ¬è¯¥å‚¨å˜äºŽæ´¾ç”Ÿéƒ¨ä»¶æˆå‘˜ä¸çš„æ•°æ®å¯ä»¥"
+"有效é™ä½Žä»£ç å¤æ‚度。而在<application>gtkmm</application>ä¸æ´¾ç”Ÿéƒ¨ä»¶ç±»å分的简"
+"å•ï¼Œæ‰€ä»¥è¿™ç§å¼ºä¾µå…¥å¼çš„写法ä¸å†éœ€è¦äº†ã€‚"
#: C/index-in.docbook:8415
msgid "X Event signals"
-msgstr ""
+msgstr "X事件信å·"
#: C/index-in.docbook:8416
msgid ""
@@ -14155,6 +14298,9 @@ msgid ""
"<literal>_event</literal>; for instance, <methodname>Widget::"
"signal_button_press_event()</methodname>."
msgstr ""
+"<classname>Widget</classname>有一些对应底层X-Windows事件的特殊信å·ã€‚它们具有"
+"<literal>_event</literal>åŽç¼€ã€‚例如:<methodname>Widget::"
+"signal_button_press_event()</methodname>。"
#: C/index-in.docbook:8422
msgid ""
@@ -14165,6 +14311,10 @@ msgid ""
"<literal>button_press_event</literal> if you needed this information. X "
"events are also often used to handle key-presses."
msgstr ""
+"å½“æœ‰äº›äº‹æƒ…ä½ æ— æ³•ä½¿ç”¨å¸¸è§„ä¿¡å·å®Œæˆæ—¶ï¼Œä½ å¯èƒ½ä¼šå‘现X事件信å·éžå¸¸æœ‰ç”¨ã€‚例如:"
+"<classname>Gtk::Button</classname>çš„<literal>clicked</literal>ä¿¡å·ä¸ä¼šå‘é€é¼ "
+"æ ‡æŒ‡é’ˆçš„åæ ‡ï¼Œè€Œ<literal>button_press_event</literal>ä¿¡å·ä¼šã€‚X事件也用于处ç†"
+"按键。"
#: C/index-in.docbook:8431
msgid ""
@@ -14174,6 +14324,10 @@ msgid ""
"pass the event on to the next signal handler. If the value is <literal>true</"
"literal> then no other signal handlers will need to be called."
msgstr ""
+"这些信å·çš„行为有所ä¸åŒã€‚它们的信å·å¤„ç†å‡½æ•°å°†é€šè¿‡è¿”回值指示有没有完全处ç†äº‹"
+"件。如果返回值为<literal>false</literal>,则<application>gtkmm</application>"
+"将会把事件å†æ¬¡å‘é€åˆ°ä¸‹ä¸€ä¸ªä¿¡å·å¤„ç†å‡½æ•°ã€‚如果返回值为<literal>true</literal>则"
+"ä¸å†ä¼ æ’ä¿¡å·ä¸å†è°ƒç”¨å…¶ä»–çš„ä¿¡å·å¤„ç†å‡½æ•°ã€‚"
#: C/index-in.docbook:8436
msgid ""
@@ -14182,6 +14336,9 @@ msgid ""
"classname>, you'll still be able to get the <literal>clicked</literal> "
"signal. They are emitted at (nearly) the same time."
msgstr ""
+"处ç†X事件ä¸ä¼šå½±å“部件的其他信å·ã€‚å¦‚æžœä½ å¤„ç†<classname>Gtk::Button</classname>"
+"çš„<literal>button_press_event</literal>ä¿¡å·ï¼Œä½ ä¾æ—§å¯ä»¥å¾—到<literal>clicked</"
+"literal>ä¿¡å·ã€‚这两个信å·å°†å‡ 乎于åŒä¸€æ—¶é—´è¢«å‘出。"
#: C/index-in.docbook:8445
#, no-wrap
@@ -14191,12 +14348,18 @@ msgid ""
"Gtk::Button button(\"label\");\n"
"button.signal_button_press_event().connect( sigc::ptr_fun(&on_button_press) );\n"
msgstr ""
+"\n"
+"bool on_button_press(GdkEventButton* event);\n"
+"Gtk::Button button(\"label\");\n"
+"button.signal_button_press_event().connect( sigc::ptr_fun(&on_button_press) );\n"
#: C/index-in.docbook:8451
msgid ""
"When the mouse is over the button and a mouse button is pressed, "
"<methodname>on_button_press()</methodname> will be called."
msgstr ""
+"å½“é¼ æ ‡æ‚¬åœåœ¨é¼ æ ‡ä¸Šæ–¹å¹¶æŒ‰ä¸‹é¼ æ ‡æŒ‰é’®æ—¶ï¼Œ<methodname>on_button_press()</"
+"methodname>将被调用。"
#: C/index-in.docbook:8456
msgid ""
@@ -14205,10 +14368,13 @@ msgid ""
"button was pressed. There are several different types of <type>GdkEvent</"
"type> structures for the various events."
msgstr ""
+"<type>GdkEventButton</type>是一个包å«äº‹ä»¶å‚数的结构体,其ä¸åŒ…å«æŒ‰ä¸‹æŒ‰é’®æ—¶é¼ æ ‡"
+"指针的åæ ‡ç‰ä¸€ç³»åˆ—ä¿¡æ¯ã€‚对于ä¸åŒçš„事件,有ä¸åŒçš„<type>GdkEvent</type>结构体类"
+"型与之对应。"
#: C/index-in.docbook:8464
msgid "Signal Handler sequence"
-msgstr ""
+msgstr "ä¿¡å·å¤„ç†å‡½æ•°åºåˆ—"
#: C/index-in.docbook:8472
#, no-wrap
@@ -14216,6 +14382,8 @@ msgid ""
"\n"
"button.signal_button_press_event().connect( sigc::ptr_fun(&on_mywindow_button_press), false );\n"
msgstr ""
+"\n"
+"button.signal_button_press_event().connect( sigc::ptr_fun(&on_mywindow_button_press), false );\n"
#: C/index-in.docbook:8465
msgid ""
@@ -14228,6 +14396,11 @@ msgid ""
"<literal>false</literal> for the optional <literal>after</literal> "
"parameter. For instance, <_:programlisting-1/>"
msgstr ""
+"é»˜è®¤æƒ…å†µä¸‹ï¼Œä½ çš„ä¿¡å·å¤„ç†å‡½æ•°å°†äºŽæ‰€æœ‰ä¹‹å‰è¿žæŽ¥åˆ°ä¿¡å·çš„ä¿¡å·å¤„ç†å‡½æ•°ä¹‹åŽè¢«è°ƒç”¨ã€‚"
+"但是这对于X事件信å·å¯èƒ½ä¼šå‡ºé—®é¢˜ã€‚例如,现有的信å·å¤„ç†å‡½æ•°æˆ–默认信å·å¤„ç†å‡½æ•°å¦‚"
+"果返回了<literal>true</literal>将会åœæ¢äº‹ä»¶ä¼ æ’ï¼Œè¿™æ—¶å€™ä½ çš„ä¿¡å·å¤„ç†å‡½æ•°å°±ä¸ä¼š"
+"è¢«è°ƒç”¨ã€‚ä½ å¯ä»¥æŒ‡å®šå¯é€‰å‚æ•°<literal>after</literal>为<literal>false</"
+"literal>ï¼Œè¿™æ ·ä½ çš„ä¿¡å·å¤„ç†å‡½æ•°å°±æ€»æ˜¯ä¼šè¢«è°ƒç”¨ã€‚例如:<_:programlisting-1/>"
#: C/index-in.docbook:8476
msgid ""
@@ -14237,10 +14410,13 @@ msgid ""
"the parent widget and emitted there. This continues all the way up to the "
"top-level widget if no one handles the event."
msgstr ""
+"这个事件将首先被å‘é€åˆ°å‘生事件的部件ä¸ã€‚如果该部件的所有信å·å¤„ç†å‡½æ•°éƒ½è¿”回"
+"<literal>false</literal>。则该信å·å°†è¢«ä¼ æ’到部件的父部件ä¸ã€‚如果åŽç»æ²¡æœ‰äººå¤„"
+"ç†äº‹ä»¶ï¼Œä¿¡å·ä¼šä¸€ç›´ä¼ æ’到顶级窗å£éƒ¨ä»¶ã€‚"
#: C/index-in.docbook:8487
msgid "Exceptions in signal handlers"
-msgstr ""
+msgstr "ä¿¡å·å¤„ç†å‡½æ•°ä¸çš„异常"
#: C/index-in.docbook:8488
msgid ""
@@ -14249,6 +14425,8 @@ msgid ""
"exception was thrown. This is more difficult than usual if the exception was "
"thrown from a signal handler."
msgstr ""
+"当程åºå› 未处ç†C++异常而终æ¢æ—¶ï¼Œæœ‰æ—¶å€™å¯ä»¥ä½¿ç”¨è°ƒè¯•å™¨æŸ¥æ‰¾æŠ›å‡ºå¼‚常的ä½ç½®ã€‚但是如"
+"果异常是在信å·å¤„ç†å‡½æ•°ä¸æŠ›å‡ºçš„,这将会比平常困难的多。"
#: C/index-in.docbook:8493
msgid ""
@@ -14256,6 +14434,8 @@ msgid ""
"you use <ulink url=\"http://www.gnu.org/software/gdb/\";>the gdb debugger</"
"ulink>."
msgstr ""
+"本å°èŠ‚组è¦ä»‹ç»ä½¿ç”¨<ulink url=\"http://www.gnu.org/software/gdb/\";>gdb调试器</"
+"ulink>在Linux系统上调试异常。"
#: C/index-in.docbook:8500
#, no-wrap
@@ -14277,12 +14457,30 @@ msgid ""
" return app->run();\n"
"}\n"
msgstr ""
+"\n"
+"// without_signal.cc\n"
+"#include <gtkmm.h>\n"
+"\n"
+"bool throwSomething()\n"
+"{\n"
+" throw \"Something\";\n"
+" return true;\n"
+"}\n"
+"\n"
+"int main(int argc, char** argv)\n"
+"{\n"
+" throwSomething();\n"
+" auto app = Gtk::Application::create(\"org.gtkmm.without_signal\");\n"
+" return app->run();\n"
+"}\n"
#: C/index-in.docbook:8497
msgid ""
"First, let's look at a simple example where an exception is thrown from a "
"normal function (no signal handler). <_:programlisting-1/>"
msgstr ""
+"首先让我们看一个简å•çš„示例,其ä¸çš„一个普通函数(éžä¿¡å·å¤„ç†å‡½æ•°ï¼‰æŠ›å‡ºå¼‚常:<_:"
+"programlisting-1/>"
#: C/index-in.docbook:8521
#, no-wrap
@@ -14297,6 +14495,15 @@ msgid ""
"#7 0x08048864 in throwSomething () at without_signal.cc:6\n"
"#8 0x0804887d in main (argc=1, argv=0xbfffecd4) at without_signal.cc:12\n"
msgstr ""
+"\n"
+"> gdb without_signal\n"
+"(gdb) run\n"
+"terminate called after throwing an instance of 'char const*'\n"
+"\n"
+"Program received signal SIGABRT, Aborted.\n"
+"(gdb) backtrace\n"
+"#7 0x08048864 in throwSomething () at without_signal.cc:6\n"
+"#8 0x0804887d in main (argc=1, argv=0xbfffecd4) at without_signal.cc:12\n"
#: C/index-in.docbook:8518
msgid ""
@@ -14305,6 +14512,9 @@ msgid ""
"can see that the exception was thrown from <filename>without_signal.cc</"
"filename>, line 6 (<code>throw \"Something\";</code>)."
msgstr ""
+"这是<application>gdb</application>会è¯çš„摘è¦ã€‚åªæ˜¾ç¤ºè¾“出ä¸æœ€æœ‰è¶£çš„部分:<_:"
+"programlisting-1/> ä½ å¯ä»¥çœ‹åˆ°åœ¨<filename>without_signal.cc</filename>的第å…è¡Œ"
+"抛出了异常(<code>throw \"Something\";</code>)。"
#: C/index-in.docbook:8537
#, no-wrap
@@ -14327,12 +14537,31 @@ msgid ""
" return app->run();\n"
"}\n"
msgstr ""
+"\n"
+"// with_signal.cc\n"
+"#include <gtkmm.h>\n"
+"\n"
+"bool throwSomething()\n"
+"{\n"
+" throw \"Something\";\n"
+" return true;\n"
+"}\n"
+"\n"
+"int main(int argc, char** argv)\n"
+"{\n"
+" Glib::signal_timeout().connect(sigc::ptr_fun(throwSomething), 500);\n"
+" auto app = Gtk::Application::create(\"org.gtkmm.with_signal\");\n"
+" app->hold();\n"
+" return app->run();\n"
+"}\n"
#: C/index-in.docbook:8534
msgid ""
"Now let's see what happens when an exception is thrown from a signal "
"handler. Here's the source code. <_:programlisting-1/>"
msgstr ""
+"现在,让我们看看从信å·å¤„ç†å‡½æ•°ä¸æŠ›å‡ºå¼‚常会å‘生什么。这是æºä»£ç :<_:"
+"programlisting-1/>"
#: C/index-in.docbook:8558
#, no-wrap
@@ -14351,6 +14580,19 @@ msgid ""
"#13 0x002e1b31 in Gtk::Application::run (this=0x804f300) at application.cc:178\n"
"#14 0x08048ccc in main (argc=1, argv=0xbfffecd4) at with_signal.cc:16\n"
msgstr ""
+"\n"
+"> gdb with_signal\n"
+"(gdb) run\n"
+"(with_signal:2703): glibmm-ERROR **:\n"
+"unhandled exception (type unknown) in signal handler\n"
+"\n"
+"Program received signal SIGTRAP, Trace/breakpoint trap.\n"
+"(gdb) backtrace\n"
+"#2 0x0063c6ab in glibmm_unexpected_exception () at exceptionhandler.cc:77\n"
+"#3 Glib::exception_handlers_invoke () at exceptionhandler.cc:150\n"
+"#4 0x0063d370 in glibmm_source_callback (data=0x804d620) at main.cc:212\n"
+"#13 0x002e1b31 in Gtk::Application::run (this=0x804f300) at application.cc:178\n"
+"#14 0x08048ccc in main (argc=1, argv=0xbfffecd4) at with_signal.cc:16\n"
#: C/index-in.docbook:8556
msgid ""
@@ -14362,6 +14604,11 @@ msgid ""
"application> or <application>gtkmm</application>, and <application>gdb</"
"application> can't see where it was thrown."
msgstr ""
+"这是<application>gdb</application>会è¯çš„摘录:<_:programlisting-1/> "
+"<application>glibmm</application>å°†æ•èŽ·äº†å¼‚常,并调用<function>g_error()</"
+"function>结æŸäº†ç¨‹åºã€‚其他的异常行为å¯èƒ½ä¸ä¸€æ ·ï¼Œä¸è¿‡æ‰€æœ‰ä»Žä¿¡å·å¤„ç†å‡½æ•°ä¸æŠ›å‡ºçš„"
+"异常都会被<application>glibmm</application>或<application>gtkmm</application>"
+"所æ•èŽ·ï¼Œå¹¶ä¸”<application>gdb</application>å°†æ— æ³•çœ‹åˆ°å¼‚å¸¸è¢«æŠ›å‡ºçš„å…·ä½“ä½ç½®ã€‚"
#: C/index-in.docbook:8581
#, no-wrap
@@ -14382,6 +14629,21 @@ msgid ""
"\n"
"Program received signal SIGTRAP, Trace/breakpoint trap.\n"
msgstr ""
+"\n"
+"> gdb with_signal\n"
+"(gdb) catch throw\n"
+"Catchpoint 1 (throw)\n"
+"(gdb) run\n"
+"Catchpoint 1 (exception thrown), 0x00714ff0 in __cxa_throw ()\n"
+"(gdb) backtrace\n"
+"#0 0x00714ff0 in __cxa_throw () from /usr/lib/i386-linux-gnu/libstdc++.so.6\n"
+"#1 0x08048bd4 in throwSomething () at with_signal.cc:6\n"
+"(gdb) continue\n"
+"Continuing.\n"
+"(with_signal:2375): glibmm-ERROR **\n"
+"unhandled exception (type unknown) in signal handler\n"
+"\n"
+"Program received signal SIGTRAP, Trace/breakpoint trap.\n"
#: C/index-in.docbook:8578
msgid ""
@@ -14389,6 +14651,8 @@ msgid ""
"application> command <userinput>catch throw</userinput>. <_:programlisting-1/"
">"
msgstr ""
+"è¦æŸ¥çœ‹å“ªé‡ŒæŠ›å‡ºäº†å¼‚å¸¸ï¼Œä½ å¯ä»¥ä½¿ç”¨<application>gdb</application>çš„"
+"<userinput>catch throw</userinput>命令。<_:programlisting-1/>"
#: C/index-in.docbook:8602
#, no-wrap
@@ -14402,6 +14666,14 @@ msgid ""
"(gdb) set pagination off\n"
"(gdb) run\n"
msgstr ""
+"\n"
+"(gdb) catch throw\n"
+"(gdb) commands\n"
+"(gdb) backtrace\n"
+"(gdb) continue\n"
+"(gdb) end\n"
+"(gdb) set pagination off\n"
+"(gdb) run\n"
#: C/index-in.docbook:8598
msgid ""
@@ -14412,6 +14684,10 @@ msgid ""
"The backtrace from the last (or possibly the last but one) <code>throw</"
"code> before the program stops, is the interesting one."
msgstr ""
+"如果在感兴趣的未æ•èŽ·å¼‚常之å‰æœ‰å¤šä¸ªæ•èŽ·å¼‚常,这个方法将会éžå¸¸çš„枯燥。å¯ä»¥ä½¿ç”¨"
+"以下<application>gdb</application>命令自动化进行这个工作。<_:"
+"programlisting-1/> 这些命令将在æ¯æ¬¡æŠ›å‡ºæ—¶æ‰“å°å›žæº¯ä¿¡æ¯å¹¶ç»§ç»ã€‚通常最åŽä¸€ä¸ªæˆ–第"
+"一个<code>throw</code>æ˜¯ä½ æ‰€éœ€è¦çš„。"
#: C/index-in.docbook:8621
msgid "Creating your own signals"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]