关于场景的认识

场景、环境、状态、前置条件,这些名词都是同义词。

信息系统根本上是一个状态处理机,通过特定的处理改变系统的状态。

对信息系统的描述不能只考虑处理流程,也要考虑基于的环境、状态、场景。

关系数据库提供了一个相对简单的场景。

无状态的业务逻辑过程一般也基于一个简单的、稳定的场景。

而业务逻辑过程内部,以及UI交互过程中,场景就相对复杂。

场景设计,决定了行为的设计。

没有抽象的场景,就没有抽象的行为。

抽象的场景和抽象的行为合起来构成了一个抽象的模型。

就象一个类的设计,能够保持类的状态的变量,往往代表了类的场景,而类的方法表示了类的行为。我们使用一个类的时候,一般要先构建这个类到一个合适的场景中,就是实例化。

一个UseCase的描述也是这样的,描述粗粒度的UseCase是,往往想象着系统有一个主界面,用户可以通过一个菜单项来启动这个过程。

信息系统设计要遵循的原则就是尽量按照规范、习惯、简单的方式去设计场景、设计行为,  让用户尽快进入状态,避免不知道自己在哪里的情况发生。

 

如果第二张场景的主函数不认识`stackedWidget`,可能是因为`stackedWidget`没有被定义或者没有被正确地传递到第二张场景。 一种解决方法是将`stackedWidget`定义为一个全局变量,这样在第二张场景的主函数就可以直接使用。 另一种解决方法是在创建第二张场景时将`stackedWidget`作为参数传递进去,然后在第二张场景的主函数使用这个参数。具体实现步骤如下: 1. 在创建第二张场景时,将`stackedWidget`作为参数传递进去,可以在构造函数实现。 2. 在第二张场景的主函数使用传递进来的`stackedWidget`参数,并在返回按钮的槽函数使用`stackedWidget`的方法实现返回操作。 示例代码如下: ``` // 第一张场景 QStackedWidget *stackedWidget = new QStackedWidget(this); QWidget *map1Widget = new QWidget(); QPushButton *goToMap2Btn = new QPushButton("进入第二张场景", map1Widget); stackedWidget->addWidget(map1Widget); // 点击进入第二张场景按钮 connect(goToMap2Btn, &QPushButton::clicked, [=](){ // 创建第二张场景 QWidget *map2Widget = new QWidget(); QPushButton *backBtn = new QPushButton("返回", map2Widget); stackedWidget->addWidget(map2Widget); // 点击返回按钮返回第一张场景 connect(backBtn, &QPushButton::clicked, [=](){ stackedWidget->removeWidget(map2Widget); stackedWidget->setCurrentIndex(stackedWidget->currentIndex() - 1); }); // 显示第二张场景 stackedWidget->setCurrentIndex(stackedWidget->currentIndex() + 1); }); // 第二张场景 class Map2Widget : public QWidget { public: Map2Widget(QStackedWidget *stackedWidget) : QWidget(), m_stackedWidget(stackedWidget) { // 在第二张场景上添加返回按钮 QPushButton *backBtn = new QPushButton("返回", this); // 点击返回按钮返回第一张场景 connect(backBtn, &QPushButton::clicked, [=](){ m_stackedWidget->removeWidget(this); m_stackedWidget->setCurrentIndex(m_stackedWidget->currentIndex() - 1); }); } private: QStackedWidget *m_stackedWidget; }; // 点击进入第二张场景按钮 connect(goToMap2Btn, &QPushButton::clicked, [=](){ // 创建第二张场景 Map2Widget *map2Widget = new Map2Widget(stackedWidget); stackedWidget->addWidget(map2Widget); // 显示第二张场景 stackedWidget->setCurrentIndex(stackedWidget->currentIndex() + 1); }); ``` 在上述示例代码,第二张场景的构造函数接收一个`QStackedWidget`类型的参数`stackedWidget`,并将其保存在成员变量`m_stackedWidget`。在返回按钮的槽函数,使用`m_stackedWidget`的方法实现返回操作。在创建第二张场景时,将`stackedWidget`作为参数传递进去。这样可以避免在第二张场景的主函数定义全局变量,同时也可以避免在多个场景之间传递全局变量带来的麻烦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值