QEventLoop的方法:
.h文件
#ifndef CONTROLLER_H
#define CONTROLLER_H#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QEventLoop>
#include <QTimer>
#include <QDebug>class Controller : public QWidget {Q_OBJECTpublic:Controller(QWidget *parent = nullptr);signals:void continueSignal();void exitSignal();public slots:void handleContinueButton();void handleExitButton();private:void runLoop();bool exitLoop = false;
};#endif // CONTROLLER_H
.cpp文件
#include "controller.h"Controller::Controller(QWidget *parent) : QWidget(parent) {QVBoxLayout *layout = new QVBoxLayout(this);QPushButton *continueButton = new QPushButton("Continue", this);QPushButton *exitButton = new QPushButton("Exit", this);layout->addWidget(continueButton);layout->addWidget(exitButton);connect(continueButton, &QPushButton::clicked, this, &Controller::handleContinueButton);connect(exitButton, &QPushButton::clicked, this, &Controller::handleExitButton);QTimer::singleShot(0, this, &Controller::runLoop);
}void Controller::handleContinueButton() {emit continueSignal();
}void Controller::handleExitButton() {exitLoop = true;emit continueSignal(); // 用于退出QEventLoop
}void Controller::runLoop() {double initialAmplitude = 100.0;double maxAmplitude = 200.0;double currentAmplitude = initialAmplitude;int increaseCount = 0;while (currentAmplitude < maxAmplitude && !exitLoop) {QEventLoop loop;connect(this, &Controller::continueSignal, &loop, &QEventLoop::quit);qDebug() << "Current Amplitude: " << currentAmplitude << ", Increase Count: " << increaseCount;currentAmplitude *= 1.01;increaseCount++;// 进入事件循环,等待continueSignal或exitSignal信号loop.exec();}if (exitLoop) {qDebug() << "Loop was exited early.";} else {qDebug() << "Final Amplitude: " << currentAmplitude << ", Total Increases: " << increaseCount;}
}