gtkmm:窗口中的模态小部件

时间:2011-09-07 15:15:26

标签: c++ modal-dialog gtkmm

我有以下问题:我创建了一个程序,提示用户输入一些内容。这是使用派生的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小部件进行不同的动作,所以我总是要跟踪我正在做的事情,这不是很优雅。

1 个答案:

答案 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()是阻止的但不是模态的,这是一个危险的野兽:应用程序中的任何其他小部件仍将对用户负责。你应该避免任何不受欢迎的再入境。