模型视图控制器-在gtk_main之后恢复控制



我正在使用C中的MVC设计模式创建一个GUI应用程序。

我希望我的控制器能够将数据发送到GUI。我在GUI中有一个方法来绘制起始元素,例如板和按钮,以选择将检查器放入哪一列。

在这个方法的最后,我必须调用gtk_main(),以便GUI显示在屏幕上。我希望能够在视图和控制器类之间发送数据,但在调用此方法后,控制权不会返回给控制器类。

需要明确的是,main方法在我的控制器类中,它在我的视图类中调用"setup"方法,gtk_main()调用在"setup(setup)"方法的末尾。

如何解决此问题?

此外,例如,我认为有这样的方法:

无效drop_checker(GtkWidget*小部件,cairo_t*cr,gint-col,gint-row,int r,int g,int b)

使用GTK回调很容易调用它,因为我可以访问小部件和cr变量,但我不知道如何从控制器类中调用它。

这是应用程序设计的错误还是技术上的误解?

我认为这是一个技术误解,导致您的应用程序设计错误。对于GUI应用程序,您希望主循环始终运行,并且您的程序流应该类似于以下

int main (int argc, char **argv)
{
    <do setup>
    <do UI setup>
    gtk_main ();
    return 0;
}

只有当您调用gtk_main_quit();时,主循环才会退出,通常只有在通过窗口控件或菜单选项退出游戏时才会退出。由于主循环中的事件,游戏中发生的所有其他事情都必须发生。您可以将回调附加到小部件上的信号,如GtkButton上的"点击"信号,或者如果您需要独立发生某些事情,您可以使用g_timeout_add设置回调,以便在特定时间调用,或者仅在主循环空闲时使用g_idle_add设置回叫。

(请注意,有时您确实希望在第一个循环中运行第二个循环,但这些循环很少,与您的当前情况无关,通常GTK+会在不需要了解详细信息的情况下处理它们)

相关内容

  • 没有找到相关文章

最新更新