gpt4 book ai didi

c++ - Qt 模拟循环

转载 作者:行者123 更新时间:2023-11-28 01:42:34 24 4
gpt4 key购买 nike

我必须为一项作业创建一个 cookies 工厂模拟程序。该程序的 GUI 使用普通的 Qt 小部件(例如:标签、按钮和行编辑)来控制模拟变量和对象。我已经创建了 GUI,但我不知道如何进行模拟。

我们的老师建议使用线程(每台机器一个)。我阅读了 QThreads,但(从这个 link )得到的印象是它们并不是从其他线程访问对象的理想选择,而且我真的不知道如何创建或处理它们。

但是,模拟非常简单(我相信)它可以只用一个循环(一个线程)完成,但我不知道如何在 QMainWindow 类中创建这个循环。

所以,我的主要问题是:如何运行一个可以访问 GUI、可以被 GUI 访问(以便它可以更改机器的值)并且可以访问机器的循环?我真的不知道如何连接 GUI 和模拟。

谢谢,抱歉发了这么长的帖子。

编辑#1:我正在尝试做的伪代码:

// Machines' initialization:
rawMaterialsTransport = new RawTransport();
doughMachine->conveyour = doughConveyour;

// Simulation loop:
lastTime = 0
while(running) {
// Handle pauses.
while(simulationPaused) {
sleep(100);
}

// Update machines/do the simulation
timePassed = now() - lastTime
lastTime = now()

rawMaterialsTransport->update(timePassed);
doughMachine->update(timePassed);
chocolateMachine->update(timePassed);
doughConveyour->update(timePassed);

// Update the GUI
chocolateGramsProcessedLabel->setText(to_string(chocolateMachine->gramsProcessed()));

// Sleep so as to not waste
sleep(100);
}


// On the GUI side:
onLineEditEnter() {
doughMachine->gramsPerSecond = double(lineEdit->text);
}

onPauseButtonPress() {
simulationPaused = !simulationPaused;
}

最佳答案

您可以使用信号和槽。

在 GUI 中,您将 GUI 项(按钮、行编辑等)发出的信号连接到执行业务逻辑的自定义插槽。例如,按钮在按下时发出 clicked 信号。

如果插槽中的业务逻辑处理已终止,您将发出另一个连接到更新 GUI 的小部件中的插槽的信号。

如果GUI挂了,即业务逻辑的处理耗时太长,你就得另开一个线程来做业务逻辑。信号和槽也可以跨线程工作。

引用资料

关于c++ - Qt 模拟循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46578614/

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