как сопоставить окно GTK с данными - PullRequest
1 голос
/ 14 марта 2012

Мы пишем диагностический инструмент с использованием GTK. Вы должны посмотреть несколько свойств разных объектов, каждое в своем окне. Таким образом, вы должны иметь возможность открыть несколько одинаковых окон, каждое из которых «привязано» к определенному объекту. Когда, например, нажата кнопка, вызывается соответствующий обратный вызов GTK. Но поскольку все окна одинаковы, нет естественного способа увидеть, какой объект следует изменить. Как мы можем сопоставить каждое окно с его объектом хорошим способом? Прямо сейчас мы используем карту, отображающую окна gtk на объект, но это больше похоже на взлом. Можем ли мы передать информацию об объекте более элегантным способом?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

GtkWindow является косвенным подклассом GObject, поэтому вы можете использовать семейство функций g_object_set и g_object_getg_object_set_data и т. Д.).

0 голосов
/ 14 марта 2012

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

int pid = 12345;
GValue val = G_VALUE_INIT;
g_value_init (&val, G_TYPE_INT);
g_value_set_int (&val, pid);
g_object_set (G_OBJECT(window), "pID", &val, NULL); //add to GTKWindow

. При нажатии кнопки в этом окне используется следующая сигнальная функция:

extern "C" G_MODULE_EXPORT void onButtonStepClicked(GtkObject* caller, gpointer data){
    GValue _pid;
    GtkWidget* window = gtk_widget_get_toplevel (GTK_WIDGET(caller));
    g_object_get_property(G_OBJECT(window), "processID", &_pid);
    cout << (int)g_value_get_int(&pID) << endl;
}

Но теперь я получаю предупреждение на мой терминал:

GLib-GObject-WARNING **: g_object_set_valist: класс объекта GtkWindow' has no property named pID '

Так что я погуглил некоторое времяи нашел пример, где мне сначала нужно установить эти свойства в класс.Имеет ли это смысл, или я что-то здесь упустил?

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