我想生成从0到1的随机值,间隔一秒。我已经写了这个代码,但我不明白如何才能延迟1秒。
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRandomGenerator>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setStyleSheet("background-color: black;");
ui->random_label->setAlignment(Qt::AlignCenter);
ui->random_label->setStyleSheet("color: rgb(255, 255, 255);");
while(true)
{
double value = QRandomGenerator::global()->generateDouble();
qDebug()<<QString::number(value,'f',2);
//i need delay here of 1 second
}
}
MainWindow::~MainWindow()
{
delete ui;
}
我需要在循环中的这行qDebug()<<QString::number(value,'f',2);
之后1秒的deley,并且我还在需要1秒延迟的地方写注释。请帮帮我,我是Qt的新手。我怎么能延迟1秒?
您的while(true)
将在构造函数中阻塞。
相反,使用QTimer
,将其间隔设置为1秒,并将其超时信号连接到MainWindow
类中的插槽。在该插槽中,运行当前位于while
主体中的代码。
这使得";更新随机数";从构造函数进入由应用程序完成的事件处理。
您可以创建一个计时器,并使用以下示例连接随机生成器:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qtimer.h"
#include "QRandomGenerator"
#include "QDebug"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//Initialize timer
QTimer *_timer = new QTimer(this);
double value;
//connect timer to random generator using lambda expression
connect(_timer,&QTimer::timeout,[&](){
value = QRandomGenerator::global()->generateDouble();
qDebug()<<QString::number(value,'f',2);
});
//emit timeout after every 1 sec.
_timer->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
注意generateDouble()
在正则范围[0,1((即包括0且不包括1(内生成一个随机qreal。