Я не нашел никакой функции * _to_string() для GtkWidgetPath, так как я могу легко изучить ее содержимое, чтобы отладить проблему, которую у меня есть? Печать его текстового представления на консоли будет велика.Есть ли простой способ получить текстовое представление GtkWidgetPath?
2
A
ответ
1
Если я вас понимаю правильно, вы хотите поставить что-то вроде
<Widget>#<Name>: <NameOfObject>#<Name>
The widget belongs to the following style classes: <listOfClasses>
Complete Path: <Path>
для конкретного виджета на экране.
Я написал следующие две функции, которые выполняют эту работу. Код должен быть легко переводим на другие языки и является самоочевидным, если у вас есть ссылка.
gchar *
widget_path_get_style_classes (GtkWidgetPath * path)
{
GSList *list;
gchar *str = NULL, *ptr;
list = gtk_widget_path_iter_list_classes (path, -1);
if (list == NULL)
return NULL;
do {
ptr = str;
str = g_strdup_printf (".%s", (gchar *) list->data);
str = g_strjoin (", ", str, ptr, NULL);
g_free (ptr);
} while (list = g_slist_next (list));
g_slist_free(list);
return str;
}
void
widget_path_dumper (GtkWidget * widget)
{
GtkWidgetPath *path;
guint i, length;
gchar *str;
GType type;
path = gtk_widget_get_path (widget);
length = gtk_widget_path_length (path) - 1;
type = gtk_widget_path_iter_get_object_type (path, length);
str = (gchar *) gtk_widget_path_iter_get_name (path, length);
if (str != NULL)
g_print ("<Widget>#<Name>: %s#%s\n", g_type_name (type), str);
else
g_print("<Widget>: %s\n", g_type_name(type));
str = widget_path_get_style_classes (path);
if (str != NULL) {
g_print
("\tThe widget belongs to the following style classes: %s\n", str);
g_free (str);
}
g_print ("\tComplete Path: ");
for (i = 0; i <= length; i++) {
type = gtk_widget_path_iter_get_object_type (path, i);
g_print ("/%s", g_type_name (type));
}
g_print ("\n");
}
Пример:
Если вы звоните widget_path_dumper
на реализованным button1
виджете прикрепленного файла Ui он помещает
<Widget>#<Name>: GtkButton#myspecialbutton
The widget belongs to the following style classes: .button
Complete Path: /GtkWindow/GtkGrid/GtkFrame/GtkAlignment/GtkButton
на экране.
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="border_width">10</property>
<signal name="destroy" handler="gtk_main_quit" swapped="no"/>
<child>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">out</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">10</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="left_padding">12</property>
<child>
<object class="GtkButton" id="button1">
<property name="label" translatable="yes">button</property>
<property name="name">myspecialbutton</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="use_action_appearance">False</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes"><b>frame1</b></property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
0
Поскольку Gtk v3.2 есть gtk_widget_path_to_string
, который может быть использован простой так:
printf("%s\n",gtk_widget_path_to_string (path));
.. однако выход не так приятно смотреть по сравнению с предложением user1146332 в
Смежные вопросы
- 1. Есть ли текстовое представление Thrift?
- 2. Есть ли способ получить простой обзор NSArray?
- 3. Есть ли простой способ программно получить алфавит?
- 4. есть ли простой способ получить дату?
- 5. Получить текстовое представление поля записи?
- 6. Есть ли универсальный способ получить хорошее текстовое представление переменной в VBA?
- 7. Есть ли простой способ сделать ScrollViewer "bouncy"?
- 8. Есть ли способ легко получить представление JavaScript модели C#?
- 9. Есть ли способ получить представление GUI Mini Mongo?
- 10. Есть ли способ получить представление графического интерфейса данных в Meteor.js?
- 11. Есть ли способ запустить представление внутри частичного
- 12. Есть ли способ распечатать бит-представление объекта?
- 13. Есть ли простой способ выбора в linq
- 14. Есть ли простой способ ПРОЧИТАТЬ ULS программно?
- 15. Есть ли способ отключить текстовое поле JComboBox?
- 16. Есть ли простой способ обратного преобразования шаблона?
- 17. способ поместить текстовое представление в сторону listview
- 18. Есть ли простой способ изменить эти строки
- 19. DB2 - Есть ли простой способ получить «предыдущее действительное значение»?
- 20. Есть ли «простой» способ получить mod_wsgi для отражения обновлений Django?
- 21. Есть ли простой способ получить количество символов, напечатанных на C++?
- 22. Есть ли простой способ получить все распространенные расширения модулей?
- 23. Есть ли простой способ получить только браузер и ОС?
- 24. Есть ли более простой способ получить время Utc в gamemaker?
- 25. Есть ли простой способ получить размер кучи python?
- 26. Есть ли простой способ получить размеры изображения в Ruby?
- 27. Есть ли простой способ получить размер объекта java?
- 28. Есть ли более простой способ получить первое появление чего-то?
- 29. Есть ли простой способ получить тени в OpenGL?
- 30. astropy.io.votable - Есть ли простой способ получить ПАРАМЕТРЫ VOTABLE?
отлично работает спасибо, только nitpick это предупреждение, которое я получаю при компиляции 'helloworld.c: In function 'widget_path_get_style_classes': helloworld.c: 18: 9: warning: format '% s' ожидает аргумент типа 'char *', но аргумент 2 имеет тип 'gpointer' [-Wform at] ' – knocte
Я забыл использовать' gpointer' для 'gchar *'. Я обновлю код соответствующим образом. – user1146332