Qt定时器和随机数详解
一、什么是Qt定时器
Qt定时器用于在一定时间间隔内执行任务,可以实现定时刷新UI、定时发送消息等功能。它与用户界面线程一起循环运行,并在主线程中处理事件,因此可以避免在主线程中阻塞任务的情况。
1.1 创建定时器
要创建一个定时器,我们可以使用QTimer
类。比如:
QTimer *timer = new QTimer(this);
使用new
操作符创建一个定时器对象,这个定时器它是属于某个对象的,并可以被该对象的信号槽机制进行管理,这里我们将其父对象设置为this
。
1.2 启动定时器
我们可以使用start()
方法启动一个定时器:
timer->start(1000);
这里启动了一个间隔为1秒的定时器。我们还可以使用下面这个方法修改时间间隔:
timer->setInterval(500);
1.3 停止定时器
可以使用stop()
方法停止定时器:
timer->stop();
二、什么是Qt随机数
Qt提供了一个qrand()
函数来生成随机数。我们可以在需要的地方调用该函数,这是一个线程安全的函数。
2.1 生成随机数
使用qrand()
函数来生成一个随机数,比如:
int number = qrand() % 100;
这里生成了一个0到99之间的随机数。对于想要更加随机的数,我们还可以使用下面这个函数:
qsrand(QDateTime::currentMSecsSinceEpoch() / 1000);
这里是使用当前时间作为随机数生成器的种子,从而得到更加随机的数。
三、示例说明
3.1 示例一
在一个LCD显示屏上显示当前时间,并且使用定时器使其每隔一秒进行更新,示例代码如下:
#include <QtWidgets>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QLCDNumber *lcd = new QLCDNumber(8);
lcd->setSegmentStyle(QLCDNumber::Filled);
lcd->setWindowTitle("Digital Clock");
lcd->show();
QTimer *timer = new QTimer;
QObject::connect(timer, &QTimer::timeout, [&lcd]() {
lcd->display(QTime::currentTime().toString("hh:mm:ss"));
});
timer->start();
return app.exec();
}
3.2 示例二
生成10个小球,随机设置它们的位置,并使用定时器对它们进行移动,示例代码如下:
#include <QtWidgets>
class Ball : public QWidget
{
public:
Ball(QWidget *parent = nullptr) : QWidget(parent)
{
const auto red = qrand() % 256;
const auto green = qrand() % 256;
const auto blue = qrand() % 256;
color_ = QColor(red, green, blue);
int radius = qrand() % 50 + 10;
resize(radius * 2, radius * 2);
x_ = qrand() % (parent->width() - radius);
y_ = qrand() % (parent->height() - radius);
timer_ = new QTimer;
connect(timer_, &QTimer::timeout, this, &Ball::move);
timer_->start(qrand() % 20 + 5);
}
void paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setBrush(QBrush(color_));
painter.drawEllipse(rect());
}
void move()
{
x_ += qrand() % 21 - 10;
y_ += qrand() % 21 - 10;
if (x_ < 0) x_ = 0;
if (y_ < 0) y_ = 0;
if (x_ + width() > parentWidget()->width()) x_ = parentWidget()->width() - width();
if (y_ + height() > parentWidget()->height()) y_ = parentWidget()->height() - height();
move(x_, y_);
}
private:
QTimer *timer_;
QColor color_;
int x_;
int y_;
};
class Widget : public QWidget
{
public:
Widget(QWidget *parent = nullptr) : QWidget(parent)
{
for (int i = 0; i < 10; ++i) {
Ball *ball = new Ball(this);
ball->move(qrand() % width(), qrand() % height());
ball->show();
}
}
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
qsrand(QDateTime::currentMSecsSinceEpoch() / 1000);
Widget widget;
widget.show();
return app.exec();
}
以上就是Qt定时器和随机数的详细攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Qt定时器和随机数详解 - Python技术站