GTK +: GtkTreeView: передача дополнительных данных при нажатии на ячейку - PullRequest
0 голосов
/ 17 ноября 2011

Я совсем новичок в GtkTreeView.Я создаю один столбец с несколькими строками и определяю, когда пользователь нажимает на каждую строку (или в данном случае на ячейку).

Я могу получить метку из ячейки, но это не такпросто достаточно для того, что мне нужно сделать.У меня есть структура, которая содержит несколько дополнительных параметров, которые я хотел бы передать.В настоящее время я использую обратный вызов для всего дерева следующим образом:

GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
g_signal_connect(selection, "changed", G_CALLBACK(on_changed), selection);

Я добавляю строки в TreeView.Можно ли создать уникальный сигнал для каждой строки, где я мог бы передать свою структуру в качестве параметра, пожалуйста?Иначе, есть ли другой способ передачи данных для функции?Проблема в том, что каждая строка имеет уникальную структуру, которая содержит различную информацию.

Большое спасибо.

РЕДАКТИРОВАТЬ:

Я не понял всю мощь TreeView,Я поместил все в свою модель сейчас, и она работает просто отлично.Извините, ребята, теперь я понимаю модель намного лучше.

1 Ответ

1 голос
/ 18 ноября 2011

Хотя вы нашли свой ответ, просто добавив пару моментов, которые могут оказаться полезными:
1. При подключении обратного вызова для сигнала к виджету избыточно передавать виджет, к которому вы подключаете обратный вызов, в качестве данных. В g_signal_connect(selection, "changed", G_CALLBACK(on_changed), selection); передача selection в качестве данных является избыточной, поскольку функция обратного вызова для подписи "changed" имеет первый параметр как GtkTreeSelection *, через который вы получите указатель на selection. AFAIK это верно для всех обратных вызовов; вы обнаружите, что в функции обратного вызова есть GtkWidget * (или указатель на объект, для которого был подключен обратный вызов сигнала), через который будет получен объект, для которого был получен сигнал.
2. Если вы уже не знали, то, что вы узнали самостоятельно, это Model-View-Controller или MVC реализация в GtkTreeView. В этом шаблоне логика данных, пользовательский интерфейс и логика взаимодействия ввода разделены. GtkListStore & GtkTreeStore представляют модель, которая содержит ваши данные. Таким образом, чтобы добавить любой вид данных, которые вы используете эти. Представление или пользовательский интерфейс в этом случае состоит из GtkTreeView, GtkCellRenderer и т. Д. И, конечно, вы управляете взаимодействиями посредством обработки пользовательских вводов с помощью сигналов и обратных вызовов.
Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...