qt c++ 用qtimer实现一个可暂停的秒表代码
时间: 2024-09-23 09:12:36 浏览: 57
在Qt C++中,你可以使用`QTimer`类和`emit`信号机制来创建一个可以暂停和继续计时的秒表功能。下面是一个基本的示例代码:
```cpp
#include <QObject>
#include <QTimer>
#include <QThread>
class Stopwatch : public QObject
{
Q_OBJECT
private:
QTimer* m_timer;
bool m_running;
public:
explicit Stopwatch(QObject* parent = nullptr) : QObject(parent)
{
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &Stopwatch::incrementTime);
m_running = false;
}
signals:
void timeElapsed(int seconds);
public slots:
void start()
{
if (!m_running) {
m_running = true;
m_timer->start(1000); // 每隔1秒触发一次信号
}
}
void pause()
{
if (m_running) {
m_running = false;
m_timer->stop();
}
}
void resume()
{
if (!m_running) {
m_running = true;
m_timer->start(1000);
}
}
private:
void incrementTime()
{
int currentSeconds = qApp->currentTimeSec();
emit timeElapsed(currentSeconds - m_lastTime);
m_lastTime = currentSeconds; // 更新上一次的时间
}
private:
int m_lastTime;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Stopwatch stopwatch;
QObject::connect(&stopwatch, &Stopwatch::timeElapsed, std::cout, &std::cout << "Time Elapsed: ");
stopwatch.start();
// 程序在此运行,直到暂停或关闭
return app.exec();
}
```
在这个例子中,我们创建了一个名为`Stopwatch`的类,它包含一个`QTimer`实例和一个布尔标志`m_running`来控制秒表的状态。`start()`, `pause()`, 和 `resume()` 是用于操作秒表的公共槽函数,而`incrementTime()` 是每次定时器触发时执行的方法,负责计算并发射时间差信号。
阅读全文