我有以下问题:我创建了一个程序,提示用户输入一些内容。这是使用派生的Gtk::Dialog
完成的,使用如下:
if (modal_dialog->run() == SUCCESS){
// do stuff depending on modal_dialog inputs here
}
现在,我想通过主窗口中显示的嵌入式窗口小部件替换对话框,但就像我的模态对话框一样。这意味着我希望能够调用类似的内容:
if (modal_widget->run == SUCSESS){
// hide modal widget and do stuff
}
这在C ++ / gtkmm中是否可以轻松实现?
注意:我设法使用状态变量等获得了所需的行为(对最终用户来说感觉相同)...这意味着,我手动show
想要模仿小部件,并告诉wannabe-modal小部件中的确认按钮执行其余的例程(上述if
- 语句的主体)。但是,我正在使用相同的wannabe-modal小部件进行不同的动作,所以我总是要跟踪我正在做的事情,这不是很优雅。
答案 0 :(得分:2)
而不是调用run()
您可以创建本地循环对象并创建嵌套循环。我不太了解gtkmm,但gtk +代码将是:
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(loop);
g_main_loop_unref(loop);
现在,在Ok / Cancel按钮的clicked
事件中,只需调用g_main_loop_quit(loop)
,嵌套循环就会中断。
实际上,这或多或少是gtk_dialog_run
函数的作用。
但要注意!您的小部件run()
是阻止的但不是模态的,这是一个危险的野兽:应用程序中的任何其他小部件仍将对用户负责。你应该避免任何不受欢迎的再入境。