开始时候timer->start(150),暂停时候 timer->stop,再次开始会加速。C++示例
时间: 2024-02-25 22:53:24 浏览: 96
以下是一个 C++ 示例,演示了如何在暂停和恢复计时器时避免加速的问题:
```cpp
#include <QTimer>
#include <QTime>
QTimer* timer = new QTimer();
QTime time;
int remainingTime = 0;
// 启动计时器
timer->start(150);
time.start();
// 暂停计时器
timer->stop();
remainingTime = time.elapsed();
// 恢复计时器
time.restart();
timer->start(150 - remainingTime);
```
在这个示例中,我们使用了 `QTimer` 类来创建一个计时器,并使用 `QTime` 类来记录时间。在计时器启动时,我们使用 `time.start()` 记录起始时间。在暂停计时器时,我们使用 `timer->stop()` 停止计时器,并使用 `remainingTime` 变量记录剩余时间。在恢复计时器时,我们使用 `time.elapsed()` 计算出暂停时间,并使用 `timer->start(150 - remainingTime)` 设置计时器的起始时间,以避免加速的问题。
相关问题
qt c++ 用qtimer实现一个可暂停的秒表代码
在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()` 是每次定时器触发时执行的方法,负责计算并发射时间差信号。
double timeDiff::stop_timer()
`timeDiff::stop_timer()` 是一个计时器类 `timeDiff` 的成员函数,用于停止计时器并返回计时器记录的时间间隔。返回值的类型是 `double`,表示时间间隔的浮点数值,单位是秒。
下面是一个简单的 `timeDiff` 类的示例代码,其中 `start_timer()` 函数用于启动计时器并记录当前时间,`stop_timer()` 函数用于停止计时器并计算时间间隔:
```c++
#include <chrono>
class timeDiff {
public:
void start_timer() {
m_start = std::chrono::high_resolution_clock::now();
}
double stop_timer() {
auto end = std::chrono::high_resolution_clock::now();
auto time_span = std::chrono::duration_cast<std::chrono::duration<double>>(end - m_start);
return time_span.count();
}
private:
std::chrono::time_point<std::chrono::high_resolution_clock> m_start;
};
```
使用示例:
```c++
timeDiff timer;
timer.start_timer();
// 这里是需要计时的代码
double elapsed_time = timer.stop_timer();
std::cout << "Elapsed time: " << elapsed_time << " seconds" << std::endl;
```
阅读全文