当前位置: 首页 > news >正文

Qt常用控件——QLCDNumber

文章目录

    • QLCDNumber核心属性
    • 倒计时小程序
    • 倒计时小程序相关问题

QLCDNumber核心属性

QLCDNumber是专门用来显示数字的控件,类似于这样:

image-20240911213827270

属性说明
intValue获取的数字值(int).
value获取的数字值(double)
和intValue是联动的
例如value设为1.5,intValue值就是2
设置value和intValue的方法名为display
digitCount显示几位数字
mode数字显示形式:
QLCDNumber::Dec:显示十进制(只有十进制才能显示小数点后的内容)
QLCDNumber::Hex:显示十六进制
QLCDNumber::Bin:显示二进制
QLCDNumber::Oct:显示八进制
segmentStyle设置显示风格:
QLCDNumber::Flat:平面显示风格,数字呈现在平坦的表面
QLCDNumber::Outline:轮廓风格显示,数字有清晰的轮廓和阴影效果
QLCDNumber::Filled:填充显示风格,数字被填充颜色与背景区分
smallDecimalPoint设置较小的小数点

倒计时小程序

使用QLCDNumber显示一个初始值,每隔一秒数字减一,一直到0

不同显示风格:

image-20240911220401764

设置起始10秒:

ui->lcdNumber->display("10");

接下来的关键就是“每秒钟-1”这个效果。

这个属于——周期性执行某个逻辑,这类组件叫做“定时器”。

在C++标准库并没有提供定时器实现,Boost里面实现了。

另外Qt里面也封装了对应的计算器,而且封装了信号槽机制:

QTimer类:

通过这个类创建出的对象,就会产生一个timeout这样的信号,可以通过start方法来开启定时器,并且设定参数触发timeout信号的周期。

然后这样就可以结合connect把这个timeout信号绑定到需要的槽函数当中,就可以修改执行逻辑,修改LCDNumber中的数字了

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handle();
private:Ui::Widget *ui;QTimer *timer;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QTimer>
#include<QDebug>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lcdNumber->display("10");//创建QTimer实例timer = new QTimer(this);//QTimer的timeout信号和槽函数链接connect(timer, &QTimer::timeout, this, &Widget::handle);//启动计时器 参数为触发周期 单位是 mstimer->start(1000);
}Widget::~Widget()
{delete ui;
}void Widget::handle()
{//获取lcdNumber数字int val = ui->lcdNumber->intValue();if(val <= 0){timer->stop();return;}ui->lcdNumber->display(val - 1);
}

GIF 2024-9-11 22-20-05


倒计时小程序相关问题

上面是借助QTimer完成的倒计时功能,也可以使用while循环,每一秒减一来实现

Tips:

Windows提供了Sleep的接口,只能在Visual Studio里面使用;

而目前Qt采用的是mingw,windows版本的gcc,是无法使用Sleep的;

C++11标准库引入了sleep操作:sleep_for

#include "widget.h"
#include "ui_widget.h"
#include<thread>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);int val = ui->lcdNumber->intValue();while(true){std::this_thread::sleep_for(std::chrono::seconds(1));if(val <= 0){break;}ui->lcdNumber->display(--val);}
}Widget::~Widget()
{delete ui;
}

运行程序之后发现,并没有显示窗口,而是运行完毕之后,才显示计算完毕的窗口:

GIF 2024-9-11 22-33-38

这是因为这段逻辑,都是在构造函数当中完成的,构造完毕之后,才会显示

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

如果构造函数当中创建一个线程,然线程去执行这段逻辑,是否可以?

#include "widget.h"
#include "ui_widget.h"
#include<thread>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//    int val = ui->lcdNumber->intValue();
//    while(true)
//    {
//        std::this_thread::sleep_for(std::chrono::seconds(1));
//        if(val <= 0)
//        {
//            break;
//        }
//        ui->lcdNumber->display(--val);
//    }std::thread t([this](){int val = this->ui->lcdNumber->intValue();while(true){std::this_thread::sleep_for(std::chrono::seconds(1));if(val <= 0){break;}ui->lcdNumber->display(--val);}});
}Widget::~Widget()
{delete ui;
}

运行程序之后,报错了:

image-20240911223931200

这是因为Qt里面,界面有一个专门的线程去负责维护更新的(主线程,main函数所在线程)

对于GUI来说,内部包含了很多隐藏状态,Qt为了保证修改界面的工程中,线程安全不会受到影响,Qt禁止了其他线程直接修改界面。

上面的操作就是修改界面的操作。

因此Qt为了保证线程的按照,直接要求所有对界面的修改操作,必须在主线程当中完成。

对于Qt的槽函数来说,默认情况下,槽函数都是由主线程调用的,在槽函数当中修改界面没有任何问题。

主线程当中,有一个事件循环,在main函数当中:

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();	//事件循环
}

a.exec会使主线程进入事件循环,每执行一次循环,就会有固定的事情要做

综上所述,使用定时器实现倒计时,是较为合理的方案,后续如果有周期性修改界面状态的操作,优先考虑定时器

相关文章:

Qt常用控件——QLCDNumber

文章目录 QLCDNumber核心属性倒计时小程序倒计时小程序相关问题 QLCDNumber核心属性 QLCDNumber是专门用来显示数字的控件&#xff0c;类似于这样&#xff1a; 属性说明intValue获取的数字值(int).value获取的数字值(double)和intValue是联动的例如value设为1.5&#xff0c;in…...

专业学习|GERT网络概览(学习资源、原理介绍、变体介绍)

一、GERT 网络概览 GERT(Graphical Evaluation Review Technique&#xff0c;图示评审技术)是一种结合流线图理论(Flow Graphical Theory)、矩母函数(Moment Generating Function)、计划评审技术(Program Evaluation Review Technique)解决随机网络问题的方法&#xff0c;描述各…...

搭建一个基于角色的权限验证框架

说明&#xff1a;基于角色的权限验证&#xff08;Role-Based Access Control&#xff0c;RBAC&#xff09;框架&#xff0c;是目前大多数服务端的登录校验框架。本文介绍如何快速搭建一个这样的框架&#xff0c;不用Shiro、Spring Security、Sa-Token这样的“大框架”实现。 R…...

下载chromedriver驱动

首先进入关于ChromeDriver最新下载地址&#xff1a;Chrome for Testing availability 进入之后找到与自己所匹配的&#xff0c;在浏览器中查看版本号&#xff0c;下载版本号需要一致。 下载即可&#xff0c;解压&#xff0c;找到 直接放在pycharm下即可 因为在环境变量中早已配…...

在STM32工程中使用Mavlink与飞控通信

本文讲述如何在STM32工程中使用Mavlink协议与飞控通信&#xff0c;特别适合自制飞控外设模块的项目。 需求来源&#xff1a; 1、增稳云台里的STM32单片机需要通过串口接收飞控传来的云台俯仰、横滚控制指令和相机拍照控制指令&#xff1b; 2、自制的有害气体采集器需要接收飞…...

【Elasticsearch】-7.17.24版本接入

官网 https://www.elastic.co/cn/downloads/elasticsearch 本项目基于windows环境下&#xff0c;其他环境操作类似 1、初始化配置 打开config/elasticsearch.yaml 添加如下配置 cluster.name: dams_clusternetwork.host: 127.0.0.1 http.port: 9200# 不开启geo数据库 inge…...

ShouldSniffAttr在自动化测试中具体是如何应用?

在自动化测试中&#xff0c;ShouldSniffAttr 这样的函数名通常暗示它是一个用于断言&#xff08;assertions&#xff09;的工具&#xff0c;用于检查某个元素或属性是否符合预期的条件。 虽然这不是一个标准的函数名&#xff0c;但我们可以根据命名推测其用途。 例如&#xf…...

前端vue3打印,多页打印,不使用插件(工作中让我写一个打印功能)

说下总体思路&#xff0c;创建一个组件&#xff0c;里面放多个span字段&#xff0c;然后根据父组件传入的参数&#xff0c;生成子组件&#xff0c;最好我们打印子组件的信息即可。通过我多次ai&#xff0c;探索最后成功了。 子组件代码 media print 这个我要讲一下&#xff…...

传感技术是如何实现实时监测和控制的呢

传感技术在力士乐拧紧系统中实现实时监测和控制的方式主要通过以下几个步骤进行&#xff1a; 一、传感器数据采集 1. 传感器种类&#xff1a; 力士乐拧紧系统中可能包含多种传感器&#xff0c;如力矩传感器、角度传感器和转速传感器等。这些传感器各自负责检测拧紧过程中的不…...

为什么mac打不开rar文件 苹果电脑打不开rar压缩文件怎么办

你是否遇到过这样的情况&#xff0c;下载了一个rar文件&#xff0c;想要查看里面的内容&#xff0c;却发现Mac电脑无法打开。rar文件是一种常见的压缩文件格式&#xff0c;它可以将多个文件或文件夹压缩成一个文件&#xff0c;节省空间和传输时间。如此高效实用的压缩文档&…...

linux下日志系统setvbuf接口及结构体 handle_file_t成员介绍

typedef struct handle_file_t {uint8_t *wkey;//用于存储写入文件时可能需要的加密密钥int cflag;//用于表示日志文件的某些配置标志&#xff0c;例如是否启用压缩、是否启用加密等char *file_path;//用于存储日志文件的路径FILE *…...

ESP8266+httpServer+GET+POST实现网页验证密码

1. 代码 #include "esp_http_server.h" #include "esp_log.h" #include "web_server.h"// 辅助宏&#xff0c;用于计算两个数中的较小值 #define MIN(a, b) ((a) < (b) ? (a) : (b))static const char *TAG "wifi web_server";c…...

git仓库修改ip,本地代码修改

只需求修改本地项目下面的.git文件夹下的config 替换ip即可...

轻便灵活,声学卓越,流动会场创新应用—轻空间

随着现代社会对高效、灵活场地需求的日益增加&#xff0c;传统建筑场馆的局限性逐渐显现。无论是大型会议、临时展览&#xff0c;还是文化活动&#xff0c;企业与组织往往需要一个既能快速搭建&#xff0c;又具备顶级声学效果的多功能场所。由轻空间打造的流动会场应运而生&…...

13 Midjourney从零到商用·进阶篇:灯光、角度与风格等精细控制方法

在前面我们了解了提示词的书写&#xff0c;那么如何利用提示词来精确控制生成画面的灯光、角度与风格 呢&#xff1f;在本篇文章中我么一起来探讨一下。 一、灯光 在摄影中&#xff0c;对灯光的要求都是非常高的。灯光能对人物、动物、物体、场景等进行修饰。每一种微小的的灯光…...

为什么要把raw转成yuv

将RAW图像数据转换为YUV格式在图像处理和视频编解码领域有多个重要的原因。以下是一些主要原因&#xff1a; 1. 标准化和兼容性 视频编解码标准&#xff1a;YUV格式是许多视频编解码标准&#xff08;如H.264、H.265等&#xff09;所使用的颜色空间。将RAW数据转换为YUV可以使…...

基于双向RRT算法的三维空间最优路线规划matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 单向RRT算法 4.2 双向RRT算法 5.完整程序 1.程序功能描述 基于双向RRT&#xff08;Randomly Exploring Random Trees, 随机探索随机树&#xff09;算法的三维空间最优路径规划是一种解…...

若依-原理

1.代码生成器 1.1源码分析 代码生成器分为两个部分&#xff1a; 第一部分涉及将业务表结构导入到系统中 第二部分是点击生成按钮&#xff0c;系统将根据表结构生成相应的前后端代码&#xff0c;并提供下载。 1.表结构说明 gen_table&#xff1a;存储业务表的基本信息 &am…...

台球厅灯控系统如何布线 佳易王桌球计时计费管理系统操作教程

一、前言 台球厅灯控系统如何布线 佳易王桌球计时计费管理系统操作教程 佳易王台球灯控系统可外接灯控设备&#xff0c;用软件来控制灯的开关 开始计时的时候灯点亮&#xff0c;结账后灯自动关闭 二、计时灯控电路图 佳易王计时计费软件配套的灯控设备布线图&#xff0c;如上…...

安卓将本地日志上传到服务器

在安卓开发中&#xff0c;将本地日志上传到服务器是一个常见的需求&#xff0c;特别是在开发需要远程监控或调试的应用时。以下是一个基本的步骤和示例&#xff0c;说明如何实现这一功能&#xff1a; 1 本地日志上传到服务器 1.1 准备服务器 首先&#xff0c;你需要在服务器…...

XL6008直流升压电路设计与应用详解

1. 直流升压电路设计详解1.1 应用背景与需求分析便携式电子设备在现代生活中扮演着越来越重要的角色&#xff0c;从手持扫码设备到数码相机闪光灯&#xff0c;这些设备对电源系统提出了特殊要求。由于便携性限制&#xff0c;设备通常采用单节或少量电池供电&#xff0c;导致输出…...

动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略

1. 认识Zygisk-IL2CppDumper的攻击原理 如果你开发过Unity游戏&#xff0c;一定对IL2CPP不陌生。这是Unity官方推荐的脚本后端&#xff0c;它把C#代码转换成C代码再编译为本地机器码&#xff0c;相比Mono模式确实安全不少。但最近一年&#xff0c;一个叫Zygisk-IL2CppDumper的工…...

BGP路由优化实战:加速收敛,提升网络稳定性

BGP路由优化实战&#xff1a;加速收敛&#xff0c;提升网络稳定性在复杂的网络环境中&#xff0c;尤其是在大规模数据中心或跨区域互联的网络中&#xff0c;BGP&#xff08;Border Gateway Protocol&#xff09;路由协议的性能直接影响着网络的可用性和用户体验。BGP 作为互联网…...

weixin273基于微信小程序的刷题系统的设计与实现+springboot(文档+源码)_kaic

第4章 系统实现4.1登录功能模块的实现登录功能包括用户登录和管理员登录&#xff0c;在登录界面设计中包括用户名和密码、身份的检验。用户名和密码、身份的检验过程由数据库自动完成&#xff0c;此过程需要1秒左右。首先由用户填写账号和密码&#xff0c;然后选择身份&#xf…...

Java 26原生HTTP/3实战:QUIC 0-RTT握手,弱网下接口延迟砍半

文章目录引言&#xff1a;当你在地铁里刷不出二维码时&#xff0c;TCP在想什么&#xff1f;HTTP/3和QUIC&#xff1a;从"打电话确认"到"直接敲门送货"TCP的"官僚主义"QUIC的"野路子"Java 26的HTTP/3支持&#xff1a;JEP 517落地等了五…...

【AI】-----向量数据库核心应用场景

向量数据库核心应用场景 1. 大模型 / RAG 知识库&#xff08;最主流&#xff09; 企业内部文档、合同、产品手册语义检索解决大模型幻觉、知识过时问题客服机器人、智能问答、私域知识库 2. 推荐系统 电商&#xff1a;相似商品、猜你喜欢短视频/内容&#xff1a;基于用户兴趣的…...

【AI黑话日日新】什么是采样温度?

摘要 在大语言模型自回归文本生成链路中,采样温度是调控输出随机性、逻辑性与创造力的核心超参数。它依托玻尔兹曼分布思想缩放模型原始Logits向量,重塑Token概率分布形态,直接决定推理阶段的内容风格。本文从数学本质、分布映射、分层效果、关联采样策略、代码实战及业务调…...

OpenClaw 性能优化:提升响应速度和资源效率

一、引言&#xff1a;OpenClaw 性能挑战与优化价值1.1 为什么需要性能优化OpenClaw 作为运行在用户自有设备上的个人 AI 助手框架&#xff0c;其性能直接影响用户体验&#xff1a;响应延迟&#xff1a;用户发送消息到收到回复的时间资源占用&#xff1a;CPU、内存、磁盘的使用效…...

Focaler-IoU: More Focused Intersection over Union——更聚焦的交并比损失

《Focaler-IoU: More Focused Intersection over Union Loss》主要研究内容可以全面概括如下&#xff1a; 研究背景与问题&#xff1a; 在目标检测任务中&#xff0c;边界框回归的精度很大程度上取决于损失函数的设计。现有的IoU-based损失函数&#xff08;如GIoU、CIoU、EIoU…...

网络异常排查:快速定位域连接问题

问题描述与初步排查网络位置异常通常表现为计算机无法正确识别当前所在的AD域环境&#xff0c;导致访问域资源受限或登录问题。常见症状包括系统托盘显示“无法访问域”、组策略无法应用、DNS解析失败等。检查计算机是否能够ping通域控制器的主机名和IP地址。使用nslookup命令验…...