gpt4 book ai didi

c++ - 管理gui的状态

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:09 24 4
gpt4 key购买 nike

我正在开发一个图形程序,可以让您连接或托管服务器。它有一个输入IP的字段。现在有 2 种状态:HostingConnecting。托管 IP 字段时应禁用。为此,我会将以下内容添加到 HostConnectChanged 事件中:

if(state == Hosting)
{
ipField.enable(false);
}
else if(state == Connecting)
{
ipField.enable(true);
}

在我看来,这是一种以简单方式处理 gui 状态的合理方式。问题是向程序添加另一种类型的状态。它可以连接/托管或断开连接。连接后,IP 字段也应被禁用。

if(state == Hosting)
{
ipField.enable(false);
}
else if(state == Connecting)
{
if(state2 == Idle)
ipField.enable(true);
}
if(state2 == Running)
{
ipField.enable(false);
}
else if(state2 == Idle)
{
if(state == Connecting)
ipField.enable(true);
}

我想您明白这是怎么回事了。更大的程序如何处理多个状态?这不应该是具有简单解决方案的 gui 编程中的一个众所周知的问题吗?

最佳答案

较大的程序总是大量使用 separation of concerns ,并尽可能将状态保持在相关对象的本地。 state design pattern 是处理此类状态相关行为的一种非常常见的方法。 .

如果你的两个州是独立的:

理想情况下,几个不同的对象类将各自使用自己的状态机。例如,表单上的某些控件可能取决于连接状态。其他一些控件可能取决于表单中的修改状态。组件的全局状态(例如表单)然后简单地从其部分状态的组合中出现(例如连接/修改,或连接/未更改)。

如果您的状态是依赖的:

然而,在您的情况下,这两个状态是相关的,因为 RunningConnecting 似乎不兼容。最简单的方法当然是使用复合状态机,其中有效状态是所有允许的组合。然后将状态模式与复合状态一起使用。

关于c++ - 管理gui的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49435603/

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