Библиотека chrono

Есть 2 кнопки. При нажатии первой, записалось время нажатия, потом через какое-то время нажимаю вторую кнопку, и уже разница между нажатиями этих кнопок выводится в label на экран.

1 кнопка

void MainWindow::on_pushButton_3_clicked()
{
    auto end = high_resolution_clock::now();
    duration<float> duration = end - start;
    ui->lbl4->setText(QString::number(duration.count()));
}

2 кнопка

void MainWindow::on_pushButton_clicked()
{
    auto start = high_resolution_clock::now();
    QFile out("text.txt");
    if (out.open(QIODevice::Append)){
        QTextStream stream(&out);
        stream << ui->lineEdit->text() << "\n";
        out.close();
    }

}

Да, я понимаю что ошибка в том, что я объявляю переменные в кнопках. В этом и вопрос, как правильно это реализовать?


Ответы (1 шт):

Автор решения: Alexander Chernin

Есть такая штука в Qt как класс QObject, а в нем есть метод setProperty. Вы можете воспользоваться этим методом в своим коварных целях, например:

void MainWindow::on_pushButton_clicked()
{
    auto start = high_resolution_clock::now();
    ui->lbl4->setProperty("start", start.time_since_epoch().count()); // Сохраняем отсечку времени
    //...
}

Далее

void MainWindow::on_pushButton_3_clicked()
{
    qlonglong start = ui->label->property("start").toLongLong();
    qlonglong end = high_resolution_clock::now().time_since_epoch().count();
    duration<qlonglong> duration(end - start);
    ui->lbl4->setText(QString::number(duration.count()));
}
→ Ссылка