帮我写一段代码,基于QT的多线程计时器
时间: 2023-08-28 18:12:09 浏览: 96
好的,以下是基于QT的多线程计时器代码:
```cpp
#include <QtWidgets>
#include <QtCore>
class TimerThread : public QThread {
Q_OBJECT
public:
TimerThread(QObject* parent = nullptr) : QThread(parent) {}
void setTimerInterval(int interval) { m_interval = interval; }
void stop() { m_stop = true; }
signals:
void timerTick(int value);
protected:
void run() override {
int count = 0;
while (!m_stop) {
emit timerTick(count++);
msleep(m_interval);
}
}
private:
int m_interval = 1000; // default to 1 second
bool m_stop = false;
};
class TimerWidget : public QWidget {
Q_OBJECT
public:
TimerWidget(QWidget* parent = nullptr) : QWidget(parent) {
QVBoxLayout* layout = new QVBoxLayout(this);
m_label = new QLabel("0", this);
layout->addWidget(m_label);
m_thread = new TimerThread(this);
connect(m_thread, &TimerThread::timerTick, this, &TimerWidget::onTimerTick);
}
~TimerWidget() override {
m_thread->stop();
m_thread->wait();
}
void startTimer(int interval) {
m_thread->setTimerInterval(interval);
m_thread->start();
}
private slots:
void onTimerTick(int value) {
m_label->setText(QString::number(value));
}
private:
QLabel* m_label = nullptr;
TimerThread* m_thread = nullptr;
};
int main(int argc, char** argv) {
QApplication app(argc, argv);
TimerWidget timerWidget;
timerWidget.show();
timerWidget.startTimer(100); // start timer with 100ms interval
return app.exec();
}
#include "main.moc"
```
这个例子中,我们首先定义了一个`TimerThread`类,它继承自`QThread`,实现了一个计时器的逻辑。它可以通过`setTimerInterval`方法设置计时器的间隔时间,通过`timerTick`信号向外部发送计时器的数值。
然后我们定义了一个`TimerWidget`类,它继承自`QWidget`,用于显示计时器的数值。在构造函数中,我们创建了一个`TimerThread`实例,并将它的`timerTick`信号连接到`onTimerTick`槽函数上,以便在计时器数值发生变化时更新显示。
我们还提供了一个`startTimer`方法,用于启动计时器。它会将计时器的间隔时间设置为指定的值,并启动计时器线程。
最后,在`main`函数中,我们创建了一个`TimerWidget`实例,并调用它的`startTimer`方法启动计时器。运行程序后,你应该可以看到一个实时更新的计时器。
阅读全文