gpt4 book ai didi

c++ - gtkmm:窗口内的模态小部件

转载 作者:行者123 更新时间:2023-11-28 03:46:51 25 4
gpt4 key购买 nike

我有以下问题:我创建了一个提示用户进行一些输入的程序。这是使用派生的 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 中很容易实现吗?

注意:我设法使用状态变量等获得所需的行为(最终用户感觉相同)...这意味着,我手动显示 wannabe-modal 小部件,并告诉 wannabe-modal 小部件中的确认按钮执行剩余的例程(上述 if 语句的主体)。但是,我对不同的操作使用相同的 wannabe-modal 小部件,因此我必须始终跟踪我在做什么,这不是很优雅。

最佳答案

您可以创建一个本地循环对象并进行嵌套循环,而不是调用 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() 是阻塞的但不是模态的,这是一个危险的野兽:应用程序中的任何其他小部件仍将对用户负责。是否避免任何不希望的重新进入取决于您。

关于c++ - gtkmm:窗口内的模态小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7336287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com