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

【Qt开发】显示类控件——QLCDNumber

目录

1,QLCDNumber的说明

2,QLCDNumber的运用


1,QLCDNumber的说明

        QLCDNumer 是一个专门用来显示数字的控件。它类似于 "老式计算器" 的效果。它的核心属性如下:

2,QLCDNumber的运用

定时器

        运用QLCDNumber,往往可能会用到定时器。定时器(Timer)是一种用于安排函数在未来某个时间点执行的机制。它们特别适用于需要定期执行某些任务的情况。

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

定时器的基本使用步骤如下:

创建一个 QTimer 实例

QTimer* timer = new QTimer(this);

连接定时器的 timeout() 信号到槽函数:

        ​​​​​​​当定时器超时时会发出 timeout() 信号,你可以将这个信号连接到你想要执行的槽函数上。

connect(timer, &QTimer::timeout, this, &Widget::handle);

启动定时器:

        对于一次性定时器,使用 start(int msec) 方法指定毫秒数后启动定时器,之后它只会触发一次 timeout() 信号。

timer->start(1000);  // 1秒后触发

停止定时器:

timer->stop();

        下面来将 QLCDNumber 和QTimer 组合起来运用。

// 设置初始值

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

// 创建timer定时器

timer = new QTimer(this);

// 把QTimer的timeout信号和自己的槽函数进行连接

connect(timer, &QTimer::timeout, this, &Widget::handle);

// 启动定时器,参数是触发timeout信号的周期,单位是ms(毫秒)

timer->start(1000);

void Widget::handle()

{

    // 先拿到LCDNumber中的数字

    int value = ui->lcdNumber->intValue();

    if (value <= 0) {

        // 数字减到0,停止定时器

        timer->stop();

        return;

    }

    ui->lcdNumber->display(value - 1);

}

        注意:说到定时器可能会想到线程。对于GUI来说,它内部包含了很多隐藏功能,Qt为了保证修改界面的过程中,线程安全是不会受到影响的,所以Qt禁掉了其它线程直接修改界面。如下操作就会报错。

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

std::thread t([this](){

    int value = ui->lcdNumber->intValue();

    while (true) {

        std::this_thread::sleep_for(std::chrono::seconds(1));

        if (value <= 0) break;

        value -= 1;

        ui->lcdNumber->display(value);   // 该操作就是在修改界面

    }

});

        Qt 为了保证线程安全,直接要求所有的对界面的修改操作必须在主线程中完成。程序入口中的 a.exec 就会使主线程进入 “事件循环”。主线程就是专门负责GUI界面维护更新。

http://www.lryc.cn/news/2384371.html

相关文章:

  • 深入剖析 5G 核心网中的 PLMN
  • 音频AAC编码与RV1126的AENC模块的讲解
  • vue页面目录菜单有些属性是根据缓存读取的。如果缓存更新了。希望这个菜单也跟着更新。
  • Android开发-Application
  • 在TIA 博途中下载程序时找不到对应的网卡怎么办?
  • 《量子计算实战》PDF下载
  • Linux入门(部分基础相关知识+常用命令+权限)
  • 海拔案例分享-实践活动报名测评小程序
  • JavaWeb面试题 (一)
  • 解决Vue项目依赖错误:使用electron-vite重建
  • vue3样式穿透用法
  • Puppeteer 浏览器自动化操作工具
  • 5G 网络寻呼的信令及 IE 信息分析
  • 信奥赛CSP动态规划入门-最小硬币问题
  • cmd里可以使用npm,vscode里使用npm 报错
  • JAVA开发工具延长方案
  • CSS 浮动(Float)及其应用
  • CC53.【C++ Cont】一维前缀和
  • Python爬虫实战:研究Grab 框架相关技术
  • 每日leetcode
  • YouTube视频字幕转成文章算重复内容吗?
  • 网络学习-利用reactor实现http请求(六)
  • 云原生安全:IaaS安全全解析(从基础到实践)
  • 【IC_Design】跨时钟域的寄存器更新后锁存
  • Spring AI 之提示词
  • 亚远景-汽车软件开发的“升级之路”:ASPICE各等级说明
  • Java微服务架构:Spring Cloud全栈指南,附最新Demo源码,可独立运行!
  • 使用LLaMA-Factory微调ollama中的大模型(一)------家用电脑安装LLaMA-Factory工具
  • 支持向量机(SVM):分类与回归的数学之美
  • 手撕I2C和SPI协议实现