gpt4 book ai didi

c++ - Qt 信号/插槽可更改?

转载 作者:行者123 更新时间:2023-11-28 00:10:02 25 4
gpt4 key购买 nike

我一直在用 Qt 编写一些基本的应用程序,发现它的信号和槽机制非常有用。然而,有些事情我希望做,但我似乎无法弄清楚如何让它发挥作用。

基本上,我想要一个带有一些文本、图片和一些按钮的屏幕。当我按下一个按钮时,我希望屏幕上的其他内容相应地发生变化。然后我想重复这个过程。我正在考虑的应用程序类似于基于文本的基本游戏。

我希望写这样的东西:

void someFunction()
{
//Display some stuff
if(button1pressed())
{
//display some different stuff
if(button1pressed())
{
...
}
if(button2pressed())
{
...
}
if(button...pressed())
{
...
}
}
if(button2pressed())
{
//display some different stuff
if(button1pressed())
{
...
}
if(button2pressed())
{
...
}
if(button...pressed())
{
...
}
}
if(button...pressed())
{
//display some different stuff
if(button1pressed())
{
...
}
if(button2pressed())
{
...
}
if(button...pressed())
{
...
}
}
}

有没有办法像这样嵌套按钮?或者用另一种方式来实现同样的想法?谢谢!

最佳答案

太多嵌套的“if”语句不是一个好主意。为了代码的可读性,以及将来如果你想更新你的软件。这在开始时总是很简单,但后来往往很复杂......你可以使用 state pattern它允许您根据所采取的操作更改对象的行为。每次调用按钮都会改变对象的内部状态,完成这种改变的方式取决于当前的内部状态。例如:

  • 初始状态为“1”
  • 从状态“1”,触发按钮“A”导致状态“2”
  • 从状态“2”,触发按钮“A”导致状态“3”
  • 从状态“3”开始,触发按钮“B”重新初始化为状态“1”

编辑:如 Kuba 所述,QStateMachine是一个帮助你完成这个过程的类(class)。

另一个想法是存储按下按钮的顺序。将每个按下事件连接到一个插槽(QSignalMapper 可以提供帮助),并将顺序存储在列表中。然后处理列表并相应地执行操作。

关于c++ - Qt 信号/插槽可更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33621888/

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