写一个QT c++ 程序,在子线程中计时,并返回进度给主线程
时间: 2024-02-23 09:00:18 浏览: 132
好的,这里是一个简单的示例:
```c++
#include <QApplication>
#include <QThread>
#include <QDebug>
class TimerThread : public QThread {
Q_OBJECT
signals:
void updateTime(int);
public:
void run() override {
int count = 0;
while(count <= 100) {
emit updateTime(count);
count++;
msleep(100); // 等待100毫秒
}
}
};
class MainWindow : public QWidget {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QWidget(parent) {
setFixedSize(200, 100);
m_progressBar.setParent(this);
m_progressBar.setGeometry(10, 10, 180, 30);
m_startButton.setParent(this);
m_startButton.setGeometry(10, 50, 180, 30);
m_startButton.setText("Start");
connect(&m_startButton, &QPushButton::clicked, this, &MainWindow::onStartButtonClicked);
connect(&m_timerThread, &TimerThread::updateTime, this, &MainWindow::onUpdateTime);
}
private slots:
void onStartButtonClicked() {
m_timerThread.start();
}
void onUpdateTime(int progress) {
m_progressBar.setValue(progress);
}
private:
QProgressBar m_progressBar;
QPushButton m_startButton;
TimerThread m_timerThread;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
#include "main.moc"
```
在该示例中,我们创建了一个 `TimerThread` 类,该类继承自 `QThread`,并且有一个 `updateTime` 信号,用于在计时器线程中更新进度条。在 `run()` 方法中,我们不断地更新计数器并发出 `updateTime` 信号,并在每次更新后等待100毫秒。
在 `MainWindow` 类中,我们创建了一个进度条和一个按钮,用于启动计时器线程。在 `onStartButtonClicked()` 槽函数中,我们启动计时器线程。在 `onUpdateTime()` 槽函数中,我们更新进度条的值。
当我们运行该程序时,单击“开始”按钮后,计时器线程将启动,并在每次更新进度条时发出信号。主线程接收到信号后,将更新进度条的值。注意,我们使用 `connect()` 函数将 `updateTime` 信号连接到 `onUpdateTime()` 槽函数,以确保在不同线程之间正确地传递信号。
阅读全文