Qt C++:如何在按下按钮之前进行for循环

Posted

技术标签:

【中文标题】Qt C++:如何在按下按钮之前进行for循环【英文标题】:Qt C++: How to make a for loop until a button is pressed 【发布时间】:2022-01-24 02:57:17 【问题描述】:

我一直在尝试使用 Qt 用 C++ 制作 GUI Blackjack 游戏。然而,我在路上遇到了路障。去年我用纯 C++ 制作了游戏和游戏逻辑(链接如下)。我正在尝试使用相同的代码来构建游戏的 GUI 版本Github/Blackjack。

这主要是为了让卡片出现,添加这些卡片的价值,经销商和玩家设置。

在 C++ 版本中,我制作了一个所有玩家的向量,并在其末尾添加了经销商,然后使用 for 循环,我将遍历玩家以让他们玩。

在 Qt 中,我为播放器控件创建了一个带有两个按钮“Hit”和“Stand”的小部件。 “Hit”按钮很简单,将按钮的点击事件与播放器的hit成员函数联系起来。

        ctrl = new PlayerControl(nullptr, mainPlayer);
        connect(ctrl->ui->hitButton, &QPushButton::clicked, [mainPlayer]
            mainPlayer->hit();
        );

遍历向量的代码:

for (size_t i = 0; i < players.size(); i++)
            
                if (i == playerPos - 1)
                
                    ctrl->setVisible(true);
                    //how to make the loop to pause here until the user presses the 
                    //"Stand button", and then proceed with the rest of the loop?

                
                else if (i == players.size() - 1)
                    dealerPlay();
                else
                    computerPlay(players[i]);
            

我将非常感谢任何帮助。 :)

【问题讨论】:

【参考方案1】:

我不太了解您显示的代码或它与您帖子标题中的问题的关系。我只是回答这个问题,即:

如何在按下按钮之前进行 for 循环

答案是您可能不想这样做,因为这会涉及多线程或某种复杂的并发机制。在编写 GUI 时,应用程序的主线程通常处于一个循环中,等待来自操作系统的事件消息(如点击和按键)。当它收到这样的消息时,它应该快速处理它们,然后返回等待下一条消息。

在 Qt 中,您可以通过覆盖 QMainWindow 类中的函数或将 Qt 信号连接到插槽来处理这些事件。

因此,您将有一些长期存在的变量来跟踪游戏的状态,并且当您检测到玩家有移动(即通过单击按钮),您将更新这些变量,更新屏幕上显示的任何数据,然后从您的事件处理程序返回,以便您可以处理下一个事件。

【讨论】:

以上是关于Qt C++:如何在按下按钮之前进行for循环的主要内容,如果未能解决你的问题,请参考以下文章

如何在按下按钮之前激活按钮?

如何在按下另一个按钮之前更改按钮状态?

在按下 Arduino 上的特定键盘按钮之前,如何让步进电机运行?

确定在按下按钮之前最后一个焦点的 QWidget

如何在swift中使用for循环以编程方式创建按钮

显示在 Qt 中按下按钮的时间