如何在 QT C++ 中制作秒表?

How to make StopWatch in QT c++?

我正在使用 UI 在 QT 上制作应用程序。另外,我有一个功能。我想显示函数的 运行 时间。我也想暂停秒表。关于如何在我的应用程序中正确嵌入秒表的任何想法? 这是我的代码:

void SomeFunc()
{
while (1)
{
// Start Timer
// some code
// Stop Timer
// Start Timer2
// some code
// Stop Timer2
}
}

on_push_button()
{
auto futureWatcher = new QFutureWatcher<void>(this);
    QObject::connect(futureWatcher, &QFutureWatcher<void>::finished, futureWatcher, &QFutureWatcher<void>::deleteLater);
    auto future = QtConcurrent::run( [=]{ PackBytes( file_path, file_name, isProgressBar); });

    futureWatcher->setFuture(future);
}

使用QElapsedTimer 测量自开始计算以来的持续时间。 从 , you do have a MainWindow class that contains the on_push_button function. In that class, declare the QElapsedTimer member; then start 开始计算时判断。

使用 QTimer 更新用于显示当前持续时间的 GUI 元素(只需要 运行 大约每秒一次)。

示例代码:

在你的头文件中:

#include <QElapsedTimer>
#include <QTimer>
//...

class MainWindow
{
    // ... other stuff you have
private:
    QTimer m_stopwatchUpdate;
    QElapsedTimer m_stopwatchElapsed;
};

在你的 cpp 文件中:

void MainWindow::on_push_button()
{
    // ideally do this once only in the constructor of MainWindow:
    connect(&m_stopwatchUpdate, &QTimer::timeout, this, [=]{
        //.. update GUI elements here...
    });
    auto futureWatcher = new QFutureWatcher<void>(this);
    connect(futureWatcher, &QFutureWatcher<void>::finished, futureWatcher, &QFutureWatcher<void>::deleteLater);
    auto future = QtConcurrent::run( [=]{
        m_stopwatchElapsed.start();
        PackBytes(file_path, file_name, isProgressBar);
    });
    m_stopwatchUpdate.start(1000);
    futureWatcher->setFuture(future);
}