<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; Получить ID дочернего элемента GUI, созданного Glade с GtkBuilder]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=25566</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=25566&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Получить ID дочернего элемента GUI, созданного Glade с GtkBuilder».]]></description>
		<lastBuildDate>Mon, 17 Dec 2012 18:57:12 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Получить ID дочернего элемента GUI, созданного Glade с GtkBuilder]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=315183#p315183</link>
			<description><![CDATA[<p>Чтобы получать имя виджета функцией gtk_widget_get_name(widget) нужно вначале установить это имя<br />примерно так: </p><p>gtk_widget_set_name(GTK_WIDGET (gtk_builder_get_object (builder, &quot;entry1&quot;)), &quot;entry_size_cell&quot;);</p><p>тогда при обходе дочерних виджетов:<br />gtk_container_foreach(GTK_CONTAINER(dialog_param), (GtkCallback) get_params, NULL);</p><p>в функции&nbsp; get_params можно получить нужный виджет:</p><br /><p>get_params (GtkWidget *widget, gpointer p)<br />{<br />&nbsp; if (GTK_IS_CONTAINER(widget))<br />&nbsp; {<br />&nbsp; &nbsp; gtk_container_foreach(GTK_CONTAINER(widget), (GtkCallback)get_params, p);<br />&nbsp; }<br />&nbsp; else if (GTK_IS_ENTRY(widget))<br />&nbsp; {<br />&nbsp; &nbsp; const char * name = gtk_widget_get_name(widget);</p><p>&nbsp; &nbsp; if ( ! strcmp(name,&quot;entry_size_cell&quot;))<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; cell = atoi(gtk_entry_get_text(GTK_ENTRY(widget)));<br />&nbsp; &nbsp; }<br />....</p>]]></description>
			<author><![CDATA[null@example.com (jo-jimm)]]></author>
			<pubDate>Mon, 17 Dec 2012 18:57:12 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=315183#p315183</guid>
		</item>
		<item>
			<title><![CDATA[Получить ID дочернего элемента GUI, созданного Glade с GtkBuilder]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=314239#p314239</link>
			<description><![CDATA[<p>Доброго времени суток.<br />Кто-нибудь знает, как получить ID дочернего контрола, созданного Glade с GtkBuilder?</p><p>Что имеется ввиду:<br />При инициализации программы во время загрузки файла glade понятно как получить указатель на структуру нужного элемента:<br />что-то типа </p><p>typedef struct {<br />&nbsp; GtkWidget *m_window;<br />&nbsp; GtkWidget *statusbar;<br />&nbsp; GtkWidget *m_image;<br />&nbsp; guint&nbsp; &nbsp; &nbsp;statusbar_context_id;<br />&nbsp; gchar&nbsp; &nbsp; &nbsp;*filename;<br />} mozaic, * pmozaic;</p><p>GtkDialog * dialog_param;</p><p>....</p><p>&nbsp; &nbsp; gtk_builder_add_from_file (builder, BUILDER_XML_FILE, NULL);<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; pm-&gt;m_window = GTK_WIDGET (gtk_builder_get_object (builder, &quot;main_window&quot;));<br />&nbsp; &nbsp; pm-&gt;m_image = GTK_WIDGET (gtk_builder_get_object (builder, &quot;m_image&quot;));<br />&nbsp; &nbsp; pm-&gt;statusbar = GTK_WIDGET (gtk_builder_get_object (builder, &quot;statusbar&quot;));<br />&nbsp; &nbsp; dialog_param = GTK_DIALOG (gtk_builder_get_object (builder, &quot;dialog_param&quot;));<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; gtk_builder_connect_signals (builder, pm);<br />&nbsp; &nbsp; g_object_unref (G_OBJECT (builder));</p><p>а вот как потом в обработчике получить конкретный контрол GtkEntry, который вложен в dialog_param?</p><p>Я пока пришел только к такой вещи:</p><p>прохожу по всем элементам диалога</p><p>Это я вызываю в обработчике активации диалога:</p><p>gtk_container_foreach(GTK_CONTAINER(dialog_param),(GtkCallback) cb_get_param_value, NULL);</p><p>сама калбэк функция:</p><p>void <br />cb_get_param_value(GtkWidget * widget, gpointer callback_data)<br />{<br />&nbsp; g_print(&quot;%s\n&quot;,gtk_widget_get_name(widget));<br />&nbsp; if (GTK_IS_ENTRY(widget))<br />&nbsp; {<br />&nbsp; &nbsp; g_print(&quot;\t%s\n&quot;,gtk_entry_get_text(GTK_ENTRY(widget)));</p><p>.....</p><p>&nbsp; }<br />&nbsp; else if (GTK_IS_CONTAINER (widget))<br />&nbsp; {<br />&nbsp; &nbsp; gtk_container_foreach(GTK_CONTAINER(widget),(GtkCallback) cb_get_param_value, NULL);<br />&nbsp; }<br />}</p><p>И вот как мне в этой функции получить конкретный GtkEntry?</p><p>Потому что gtk_widget_get_name(widget) возвращает строку GtkEntry, а не имя, которое я задавал для него в Glade в поле name на вкладке General.</p><p>Как вообще получают дочерние элементы, когда интерфейс создается в glade с GtkBuilder? <br />Чтобы получать их не в момент загрузки файла glade, а получать именно тогда, когда нужно.</p>]]></description>
			<author><![CDATA[null@example.com (jo-jimm)]]></author>
			<pubDate>Wed, 12 Dec 2012 16:12:51 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=314239#p314239</guid>
		</item>
	</channel>
</rss>
