2011-09-07 2 views
0

다음과 같은 문제가 있습니다. 사용자에게 입력을 요구하는 프로그램을 만들었습니다. 내 메인 창에서 표시됩니다 내장 된 위젯 대화 상자를 교체하고 싶습니다 지금gtkmm : 윈도우 내의 모달 위젯

if (modal_dialog->run() == SUCCESS){ 
    // do stuff depending on modal_dialog inputs here 
} 

을하지만, 내 모달 대화처럼 동작이 다음과 같이 사용되는 파생 Gtk::Dialog을 사용하여 수행됩니다. 이것은 다음과 같이 부를 수 있다는 것을 의미합니다 :

if (modal_widget->run == SUCSESS){ 
    // hide modal widget and do stuff 
} 

C++/gtkmm에서 쉽게 가능합니까?

참고 : 내가 원하는 동작을 얻을 수 있었다 내가 수동으로 show 재수 모달 위젯이 의미 ... 등 상태 변수를 사용하여 (이것은 최종 사용자에 대해 같은 느낌), 그리고 내 확인 버튼을 말해 wannabe-modal 위젯은 일상의 나머지 부분을 수행합니다 (위 if -statements의 본문). 그러나, 나는 다른 행동을 위해 동일한 wannab-modal 위젯을 사용하고 있기 때문에, 나는 항상 내가하고있는 것을 추적해야한다. 그것은 그리 우아하지 않다.

답변

2

대신 run()을 호출 할 수 있습니다. 로컬 루프 객체를 만들고 중첩 루프를 만들 수 있습니다. 나는 아주 잘 gtkmm 모르겠지만 GTK + 코드는 다음과 같습니다

GMainLoop *loop = g_main_loop_new(NULL, FALSE); 
g_main_loop_run(loop); 
g_main_loop_unref(loop); 

지금, 당신의 확인의 clicked 이벤트/버튼을 단순히 g_main_loop_quit(loop)를 호출하고 중첩 루프가 중단됩니다 취소합니다.

실제로이 기능은 다소 달라지며 gtk_dialog_run 기능입니다.

하지만주의하십시오! 위젯 run()이 (가) 차단되지만 모달은 아닙니다. 위험한 짐승입니다. 응용 프로그램의 다른 위젯은 여전히 ​​사용자의 책임입니다. 원하지 않는 재진입을 피하는 것은 당신에게 달려 있습니다.

+0

좋은 소리입니다. 나는 그것을 시도 할 것이다! – phimuemue

+0

어떤 종류의 결과 또는 반환 값을 추가 할 가능성이 있습니까? – phimuemue

+0

글쎄, 당신은'cliked' 이벤트와'run' 함수 사이에 어떤 종류의 공유 ​​데이터가 필요합니다. 이것은 루프 변수'loop'에 도달하기 위해서입니다. 공유 데이터에 하나 이상의 변수를 추가하고 반환 할 값으로 설정 한 다음 'run'함수에서 반환하십시오. – rodrigo