Qt信号/插槽是否可更改?

时间:2015-11-10 02:30:19

标签: c++ qt

我一直在用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())
        {
           ...
        }
   }
}

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

1 个答案:

答案 0 :(得分:3)

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

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

编辑:如Kuba所述,QStateMachine是一个帮助您完成此过程的课程。

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

相关问题