割り当て用のクッキー工場シミュレーションプログラムを作成する必要があります。プログラムのGUIは、通常のQtウィジェット(ラベル、ボタン、行編集など)を使用して、シミュレーション変数とオブジェクトを制御します。私はすでにGUIを作成しましたが、シミュレーションの実行方法はわかりません。Qtを使用したシミュレーションループ
私たちの先生は、スレッド(マシンごとに1つ)を使用するように教えてくれました。私はQThreadsを読みましたが、(linkから)他のスレッドからオブジェクトにアクセスするのにはあまり理想的ではないという印象を受けました。それらの作成方法や処理方法はわかりません。
しかし、シミュレーションは1つのループ(1つのスレッド)で行うことができるほど簡単ですが、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;
}
正確に何をしようとしているのか分かりません。たぶん、いくつかのコードを表示します。それに応じて私はさまざまな解決策を見ています。おそらく:ループは使用せず、信号とスロットを使用してください。 QCoreApplication :: processEvents()(しない)、QEventLoop、QThread :: exec()、QObject :: moveToThread()、またはQTimer :: singleShot()。また、スレッド間で信号を送信することもできます。 – SteakOverflow
疑似コードを追加しようとします。 – sempiedram
あなたがスレッドを使用しないことに決めたなら、ここでは必要ないように私は同意しました。あなたはQTimerのセットをsleep()の代わりにSlotに接続することをお勧めします。ほとんど決して良い考えではありません。 – Marco