我把自己搞糊涂到无法回头的地步,觉得我的项目膨胀得太大,跟不上我目前的方式。
简而言之:
1) 有许 multimap 形屏幕(窗口),每个屏幕都是在其自己的 .cpp 中定义的一个类,并带有带有公共(public)和私有(private)减速的随附 .h header 。
2) 我正在使用 FLTK GUI 工具包,所以当我离开一个屏幕时,我会在上面调用“hide()”,我假设它会进行垃圾收集,然后我创建一个新的实例来显示要跟随的任何屏幕.
我的问题是,如果一个屏幕(我们称之为屏幕 A)创建另一个屏幕(屏幕 B),那么我必须在屏幕 A 中包含屏幕 B 的头文件,并且我在屏幕 A 中创建一个指向屏幕 B 的全局指针。
即。屏幕 A 的伪代码
#include "screenb.h"
ScreenB* screenb_ptr; // global
...
Bunch of Code, constructors, deconstructors, etc
...
void ScreenA::exit_and_make_screen_b()
{
ScreenA.hide();
screenb_ptr = new ScreenB();
}
这是最好的方法吗?我觉得它很草率(还有内存泄漏?),我应该有一个类似虚拟 .cpp/.h 的东西来跟踪一堆 extern-qualified 指针;特别是有时我必须返回/前进屏幕(即可以从多个其他屏幕跳回到主菜单屏幕)。任何建议表示赞赏!
最佳答案
这里有一些建议:
- 创建一个包含所有屏幕内容的新头文件。然后您可以只包含这个头文件并捕获所有其他屏幕头文件。
- 您可以考虑使用一个屏幕管理器来保存对您屏幕的所有引用。屏幕之间的导航然后留给处理所有引用和指针的屏幕管理器。这样您就不会将屏幕耦合在一起,而是通过一个共同的调解器进行对话。
例如:
screenManager->NavigateScreen( SCREEN_USER_PROFILE );
您的所有屏幕都可以继承自一个基类,该基类包含指向屏幕管理器的指针(它们通过构造函数获取或从静态单例实例中获取)。这样,您的所有屏幕都能够请求新的屏幕导航。
关于c++ - 具有多个 GUI 屏幕的程序的设计方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407809/