是封装UI更好,还是在QT Creator中传递一个指向UI的指针更好



我正在做一个项目,我必须对ZORK这样的基于文本的游戏进行GUI化。该项目的目标是学习C++和事件驱动编程,游戏是否好并不重要。我们已经得到了游戏代码的骨架。

所以我有一个UI类GameWindow和一个包含游戏逻辑的类。我希望游戏逻辑类从类中向UI写入一些文本。将UI公开并传递一个UI对象以直接访问屏幕上的标签(这不是破坏了封装吗?):

ui->welcomeText->setText("Welcome to the land of the text adventure!");

或者,对于一个私有UI对象,最好有很多getter和setter,在这个对象中,你可以选择gamewindow类的一个对象,然后说:

gamewindow.setWelcomeText("Welcome to the land of the text adventure!");

我对C++和设计阶段都很陌生,我不想过早地搞砸,为自己创造更多的工作。对此提供一些指导将不胜感激。

分离UI和Worker是一种很好的做法。有几种方法可以使用。

您可以在游戏和ui之间使用信号槽通信。请参阅boost::signals。如果你使用Qt,那么你也可以使用他们的信号槽机制。

您可以使用回调。

您可以使用类似Java的侦听器和事件。

class GameEvent{}
class GameListener{
    void event( GameEvent const& );
};
class Game{
    void addListenter( GameListener* );
    void removeListenter( GameListener* );
};

你可以将一个界面传递到游戏引擎中。

class Game {
   void setUI( GameUI & );
}

将ui与worker分离到不同的线程中是非常好的。在qt中,可以使用slot/signal概念,这很容易。

最新更新