繁体   English   中英

Qt信号/插槽是否可变?

[英]Qt Signals/Slots Changeable?

我一直在用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”语句不是一个好主意。 为了代码的可读性,以及将来要更新软件时使用的代码。 一开始这总是很简单,但随后往往会变得很复杂...您可以使用状态模式 ,该模式允许您根据所采取的操作来更改对象的行为。 每次调用按钮都会更改对象的内部状态,而完成此更改的方式可能取决于当前的内部状态。 例如:

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

编辑:正如Kuba所说, QStateMachine是一个在此过程中帮助您的类。

另一个想法是存储按下按钮的顺序。 将每个新闻事件连接到插槽( QSignalMapper可以帮助您),并将订单存储在列表中。 然后处理列表并采取相应的措施。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM