2010-04-15 2 views
4

gtk 위젯을 복사하거나 복제하는 방법은 무엇입니까? 내 응용 프로그램에는 하나의 커다란 GtkComboBox가 하나의 long for 루프로 만들어져있어 많은 시간을 먹고 하나의 화면에서 두 곳에서이 콤보를 사용하고 있습니다.gtk 위젯을 복사하거나 복제하는 방법은 무엇입니까?

그래서 한 번에이 콤보를 만들고 다른 시간에 복사하여 복사하면 시간이 절약됩니다.

동일한 콤보 상자 포인터를 두 번 추가하려고하면 gtk에서 "child-> paren! = NULL"오류가 발생합니다. gtk 위젯의 원인은 단일 부모 만 가질 수 있습니다.

그럼 어떻게해야합니까?

+0

도 참조를 (https://stackoverflow.com/questions/3003655/is-there-a-good-way-to-copy-a-gtk-widget) (스포일러 : 아니오). 이것들은 영혼이 아니라면 제목에 중복되어 있으므로 그들 사이에 연결 고리가있는 것이 유용합니다. –

답변

4

GTK +에서 데이터를 표시하는 많은 위젯이 모델을 기반으로하는 이유가 여기에 있습니다. 모델은 위젯이 아닌 데이터를 보유합니다. 위젯은 데이터에 대한 "보기"역할을하며 여러 위젯간에 모델을 공유 할 수 있습니다.

당신은 단지 두 콤보 상자에 같은 모델을 사용할 필요가 : [?를의 GTK 위젯을 복사 할 수있는 좋은 방법이 있나요]

GtkListStore *model; 
GtkWidget *c1, *c2; 

/* Set up the model. */ 
model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INTEGER); /* Or whatever. */ 

/* Create first combo. */ 
c1 = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model)); 

/* Create second combo. */ 
c2 = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model)); 
+0

그래서 GtkListModel을 만들고이 모델과 함께 2 개의 별도 콤보 박스를 만들어야합니다. 하지만 모델을 생성하는 동안이 함수 호출을 사용했습니다. cell = gtk_cell_renderer_pixbuf_new(); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, FALSE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), 셀, "pixbuf", 0, NULL); 목록 모델을 생성하는 동안'gtk_cell_layout_set_attributes' 및'gtk_cell_layout_pack_start' 함수 호출에 combo_box 포인터를 사용해야합니다. 이를 처리하는 방법에 대해 한 가지 예를 제시 할 수 있습니까? 나는 목록 텍스트와 이미지를 드롭 다운에서 2 열 있습니다. – User7723337

+1

@PP : 전화가 걸려온 전화가 없으므로 아무런 문제가 없습니다. 사용자 지정된 렌더러를 작성하기 위해 코드를 복제해야하지만 모델을 다시 사용할 수 있어야합니다. – unwind

+0

감사 ... 작동합니다. – User7723337

관련 문제