Этот вопрос беспокоил меня так долго. Я все еще новичок, но я просмотрел Google и до сих пор не нашел ответа. Я только нашел ключ, и я не знал, как его реализовать.Как получить указатель на виджет другого окна из функции обратного вызова - GTK - C
Скажем, у вас есть два окна верхнего уровня. Вы нажимаете кнопку одного из них, и вы хотите, чтобы это уничтожило другое окно.
Это был мой первый нефункциональные решение:
Void on_button1_clicked (GtkWidget *widget, gpointer user_data)
{
GtkWidget *window2;
window2 = lookup_widget (widget, "window2");
gtk_widget_destory (window2);
}
Ну, это не сработало. Я понял, что функция «lookup_widget» не ищет внешнюю иерархию, связанную с окном, в котором содержится «button1». Поскольку «виджет» относится к «button1». Итак, я думал, что получаю указатель на «window1» и использую это вместо этого, думая, что window1 находится в более высокой иерархии.
GtkWidget *window1;
GtkWidget *window2;
window1 = lookup_widget (widget, "window1");
window2 = lookup_widget (window1, "window2");
gtk_widget_destroy (window2);
И, к моему удивлению, это не сработало. Это можно сказать и об изменении метки другого окна, так как я не могу найти указатели на виджеты вне окна, где было запущено событие сигнала.
Ребята, мне нужна помощь!
Что такое 'lookup_widget()'? – andlabs
@andlabs это функция gtk, которую вы можете найти в support.c , она возвращает значение указателя виджета, заданного двумя параметрами. Первый - это указатель на виджет внутри того же дерева виджета, который вы ищете. Второй параметр - это строка, содержащая имя найденного виджета. – Elyes
И к какой поддержке вы относитесь? – andlabs