Gtk +

2012-04-26 3 views
0

에서 벡터의 내용을 나열합니다. Gtk +로 약간 연습하고 있습니다. 나는 작업 메뉴가있는 창을 만들기 위해 abel이었습니다. 테스트 오브젝트 (기본적으로 정사각형, 사용자에게 길이를 입력하도록 요청)를 생성하여 벡터에 저장할 수는 있지만 목록에 표시 할 수는 없습니다. 내가 원하는 무엇Gtk +

이 저장된 모든 개체를 나열하는 스크롤 창을 보여주는 것입니다, 뭔가 같은 :

_Square 1-side:7_ 
_Square 2-side:25_ 

지금까지, 나는에 대한 정보의 스크롤 텍스트 레이블 창, 그러나 아무도를 보여줄 수 저장된 객체.

Gtk::Dialog dialog("Listing Squares",false,true); 
dialog.set_default_size(500,30); 
Gtk::Button close("Close"); 
close.signal_clicked().connect(sigc::mem_fun(*this,&Window::onFileListButtonClose)); 
Gtk::VBox* vbox = dialog.get_vbox(); 

Gtk::ScrolledWindow sw; 
sw.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC); 

/** FETCH FROM ARRAY*/ 
    for(unsigned int i(0); i<vc.size();++i){ 
    Gtk::Label label("Square number " + i); 
    sw.add(label); 
    } 
sw.show_all_children(); 
vbox->pack_start(sw); 
vbox = 0; 
dialog.add_action_widget(close,1); 
dialog.show_all_children(); 
dialog.run(); 

: 가 여기에 내가 시도 코드의 [편집 :]

1) VC는 표준 : : 벡터이다. 클래스 속성입니다.

2) 사각형의 길이를 입력하고이를 vc에 저장하도록 요청하는 코드 조각.

void Window::onMenuFileNew(void) { 
    Gtk::Dialog dialog("New Square",true,true); 
    dialog.set_default_size(70,20); 
    dialog.set_has_separator(true); 
    Gtk::Button close("Close"); 

    entry.set_max_length(2); 
    entry.set_text(""); 
    close.signal_clicked().connect(sigc::mem_fun(*this,&Window::onFileNewButtonClose)); 
    Gtk::Label lab("Square side length:"); 
    Gtk::VBox* vbox = dialog.get_vbox(); 
    vbox->pack_start(lab); 
    vbox->pack_start(entry); 
    vbox = 0; 
    dialog.add_action_widget(close,1); 
    dialog.show_all_children(); 
    dialog.run(); 
} 

void Window::onFileNewButtonClose(void) { 
    int side = atoi((entry.get_text()).c_str()); 
    vc.push_back(Cuadrado(side)); 
} 

어떤 도움을 주시면 감사하겠습니다. :)

추신 : 사각형을 나열하려고하기 전에, 나는 그 중 일부를 만들었습니다!

+0

'vc'를 정의하고 채우는 코드를 제공해야합니다. 비어 있다면? – Irfy

+0

해당 코드로 게시물을 업데이트합니다! –

+0

'for' 루프에서 "Square number #"텍스트를 포함하는 레이블을 추가하기 만하면됩니다. 그 텍스트를 보시겠습니까? 'Cuadrado' 객체의 정보를 추가하기 위해 루프에 추가 코드를 추가해야할까요? 실제로 그러한 객체의 내용에 액세스 할 수 있습니까? – Irfy

답변

0

documentation에 따르면, add 멤버 함수는 참조로 위젯을 허용합니다. 즉, 여기에 전달한 객체가 컨테이너를 참조하는 컨테이너의 수명 기간 동안 존재해야합니다. for 루프에서는 루프가 한 번의 반복을 수행하는 즉시 종료되고 루프 전에 레이블을 만들면 함수의 끝에서 종료됩니다. 다음과 같이 실행하십시오 : Returning a reference to a local or temporary variable.

지금은 Gtk을 모르지만 위젯이 다른 곳으로 복사되는지 모르기 때문에 어둠 속에서 약간 촬영됩니다. 그러면 원본이 파괴 될 수 있지만 길을 찾습니다. 위에서 C + +의 관점에서 설명했습니다.

이것이 범인인지 확인하기 위해 모든 라벨을 애플리케이션에 전역으로 정의하고 표시되는지 확인하십시오. 함수/루프가 끝나고 (그리고 여전히 적절하게 파괴 될 수있는 경우)을 살아 있다고 (예 : 힙에) 선언해야한다고 알 수 있습니다.

+0

안녕하세요! 나는 그 문제를 해결했다. 힙에 레이블을 선언하고 _table_에 저장했습니다. 감사합니다. Irfy! –