C에서 Gtk 라이브러리를 사용하여 Gtk 버튼 (예 :)을 복제하고 앱의 다른 곳에 포장하는 방법이 있습니까? 같은 위젯을 두 번 포장 할 수 없다는 것을 안다.) (Gtk 위젯을 복사하는 좋은 방법이 있습니까?
GtkButton *a = g_object_new(GTK_TYPE_BUTTON, "label", "o_0", NULL);
GtkButton *b = g_memdup(a, sizeof *a);
gtk_box_pack_start_defaults(GTK_BOX(vbox), GTK_WIDGET(b));
이 중 VBOX를 만들고 창에서 팩 및 아마 gtk_main을 실행되는 코드를 둘러싸고있다 : 그리고이 코드는 분명히 작동하지만 버튼의 단순 복사본을 시도 할 때 발생하는 표시하지 않을 것이라고 . 이 오류 메시지를 이해하기 위해 이러한 하드가 발생합니다 : 같은 라인을 따라
(main:6044): Gtk-CRITICAL **: gtk_widget_hide: assertion `GTK_IS_WIDGET (widget)' failed
(main:6044): Gtk-CRITICAL **: gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed
**
Gtk:ERROR:/build/buildd/gtk+2.0-2.18.3/gtk/gtkwidget.c:8431:gtk_widget_real_map: assertion failed: (GTK_WIDGET_REALIZED (widget))
을, 난 내 자신의 G 객체 (필요하지 않게의 GTK 위젯)을 작성한다면, 복사 생성자를 작성하는 좋은 방법이있다. 그것은 선택적인 후크를 가진 인터페이스이어야하고 클래스의 계층 구조를 어떤 식 으로든 다루는 속성에 주로 기반해야한다고 생각합니다.
나는이 작업을 수행 할 것 :
GtkButton *b = copyable_copy(COPYABLE(a));
GtkButton는 이론적 복사 가능한 인터페이스를 사용할 수 있다면.
후크와 물건을 제공하여 '복사 가능'한 GObject 인터페이스를 만들 수 있습니다. 글을 쓰고 싶지는 않겠지 만, 아마도 까다로워 질 것입니다 ... – Spudd86