Qt定时器和随机数详解

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技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • “劲舞团服务器端”配置文件分析

    配置文件分析的目的和意义 在劲舞团游戏中,服务器端的配置文件被用来控制游戏的各种功能和参数。因此,对配置文件进行分析,可以帮助管理员和开发人员理解游戏的内部结构和原理,进而做出相应的优化和改进。 配置文件格式简介 劲舞团服务器端配置文件采用了INI格式,其中每个节(section)表示一个模块,每个键值对(key-value pair)表示一个参数和其对应的…

    other 2023年6月27日
    00
  • 华为手机太卡了怎么办?解决华为手机卡顿的方法

    华为手机太卡了怎么办?解决华为手机卡顿的方法 随着手机使用时间的增长和手机软件的不断升级,华为手机也会出现卡顿现象。在这篇文章中,将会介绍一些方法来解决华为手机卡顿的问题。 方法一:清理手机缓存 手机缓存是指临时存储在手机内存中的数据,这些数据在手机下一次使用时可以快速加载,从而提高手机运行速度。但是,长时间使用手机后,这些缓存数据可能会变得过多,从而导致卡…

    other 2023年6月26日
    00
  • WIN11重置系统和重装有什么区别? win11重装系统对比重置系统介绍

    当你在使用Windows 11系统的时候,有时候会出现一些问题导致系统不稳定或者文件损坏,这时候我们需要对系统进行一些调整,以恢复它的正常运行。此时我们可以采用两种方法来解决问题:重置系统和重装系统。 重置系统 通过重置系统,我们可以重新设置系统,包括删除所有应用程序,文件和用户设置。然而,此操作并不会从计算机中删除操作系统及其相关文件。重置系统方法如下: …

    other 2023年6月20日
    00
  • 详解 Linux中的关机和重启命令

    下面是详解 Linux中的关机和重启命令的完整攻略。 概述 在Linux系统中,有多种命令可以用来关机或重启系统。这些命令通常是被系统管理员或用户使用的,旨在安全、优雅地关闭或重启系统,并保留系统的运行状态、文件和配置信息。 关机命令 shutdown命令 shutdown命令是最常用的关闭系统的命令之一,可用于实现远程关闭系统或在一定时间后关闭系统。下面是…

    other 2023年6月27日
    00
  • 易语言调用百度的真相问答制作真相问答机的代码

    易语言调用百度的真相问答制作真相问答机的代码攻略 本攻略将详细介绍如何使用易语言调用百度的真相问答接口,以制作一个真相问答机。下面是完整的攻略过程: 步骤一:申请百度开发者账号和API Key 访问百度开发者中心网站(https://developer.baidu.com/),点击注册账号并按照指引完成注册。 登录百度开发者中心,创建一个新的应用,获取API…

    other 2023年7月29日
    00
  • C++ 多态虚函数的底层原理深入理解

    下面我将为你详细讲解 C++ 多态虚函数的底层原理深入理解。 什么是多态? 多态是面向对象编程中的一个核心概念,它指的是通过基类指针或引用调用派生类对象的方法,从而实现了不同的行为。这样同一类型的实体在不同情况下会有不同的行为。 C++ 中实现多态的核心是虚函数。在 C++ 中,基类中的虚函数可以被派生类所覆盖,从而允许在运行时动态绑定函数。 虚函数表(VT…

    other 2023年6月26日
    00
  • iOS利用NSMutableAttributedString实现富文本的方法小结

    下面我将为您介绍“iOS利用NSMutableAttributedString实现富文本的方法小结”的详细攻略。 一、前言 在实际开发中,我们经常会遇到需要对文本进行富文本处理的情况,例如对一段文字进行字体、颜色等样式的修改,或者实现文字的下划线、删除线等效果。iOS中,可以使用NSMutableAttributedString来实现富文本的处理。 二、NS…

    other 2023年6月27日
    00
  • CentOS 7.6安装与Nginx的配置文件详解

    下面是详细的“CentOS 7.6安装与Nginx的配置文件详解”攻略。 安装Nginx 安装Nginx前的准备 在安装Nginx之前需要检查是否有其它web服务器或应用程序监听了80端口,如果有需要先关闭它们,否则Nginx可能会启动失败。 systemctl stop httpd.service #停用Apache 安装Nginx 1、添加Nginx Y…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部