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

QT-常用控件(三)-显示类

目录

Qlabel的属性

QLCDNunber的属性(计算器)

QProgressBar的属性(进度条)


Qlabel的属性

该属性常用于显示文本和图片。

格式:在设置文本的格式testformat后,不同文本之间语法是并不互通的,<b></b>用于html格式,#等用于markdowntest格式。

图片:

// 先把 QLabe1 设置成和窗口一样大,并且把这个 QLabel 左上角设置到窗口的左上角这里
// 让整个 QLabel 铺满整个窗口
ORect windowRect=this->geometry();
ui->label->setGeometry(0,0,windowRect.width(), windowRect.height());
QPixmap pixmap(":/huaji.png");
ui->label->setPixmap(pixmap);
//启动自动拉伸。此时图片就能够填充满整个窗口了.
ui->label->setscaledcontents(true);

仅仅只设置setGeometry是不能让图片填充满整个窗口的,因为图片本身可能有尺寸限制,需要用到ui->label->setscaledcontents(true);才行,但是拖拽边框后图片的样式 可能就不那么好看,会出现大量的空白。

解决方式:事件

用户的操作,会对应一些信号,Qt 中,表示用户的操作,有两类概念一个是信号,另一个是事件。
当用户拖拽修改窗口大小的时候,就会触发 resize 事件(resizeEvent)像 resize 这样的事件,是连续变化的.把窗口尺寸从 A拖到 B这个过程中,会触发出一系列的 resizeEvent此时就可以借resizeEvent 来完成上述的功能.,可以让 Widget 窗囗类, 重写父类(QWidget) 的 resizeEvent 虚函数
在鼠标拖动窗口尺寸的 过程中 这个函数就会被反复调用执行,每次触发一个 resizeEvent 事件都会调用一次对应的虚函数。

由于此处进行了函数重写,调用父类的虚函数就会实际调用到子类的对应的函数(多态)。

设置文本对齐:

设置伙伴:

Qt 中, QLabel 中写的文本,是可以指定"快捷键”此处快捷键的规则功能上要比 QPushButton 弱很多
是在文本中使用 & 跟上一个字符来表示快捷键。
比如 &A =>通过键盘上的 alt +a来触发这个快捷键.&B =>通过键盘上的 alt +b 来触发,绑定了伙伴关系之后,通过快捷键就可以选中对应的单选按钮/复选按钮。

QLCDNunber的属性(计算器)

定时器的设定:

方式一:

#include "widget.h"
#include "ui_widget.h"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);// 启动定时器,参数是触发 timeout 的周期,单位是 mstimer->start(1000);
}Widget::~Widget()
{delete ui;
}void Widget::handle()
{//先拿到 LCDNumber 中的数字int value =ui->lcdNumber->intValue();if(value<=0){// 数字减到 0 了,停止定时器.timer->stop();return;}ui->lcdNumber->display(value -1);
}

屏幕录制 2025-10-12 165432

方式二:

现象:是10s后弹出结果为0的显示框。

原因:

方式三;多线程

结果依然是失败的,Qt 里,(main 函数所在的线程)界面有一个专门的线程去负责维护更新的(主线程),对于 GU 来说,内部包含了很多的隐藏状态,Qt 为了保证修改界面的过程中,线程安全是不会受到影响的,Qt禁止了其他线程直接修改界面。

QProgressBar的属性(进度条)

进度条

下面我们来创建一份进度条,让他随时间增长而增长,每个0.1秒+1;

进度条:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer=new QTimer(this);connect(timer,&QTimer::timeout,this,&Widget::handle);timer->start(100);
}
void Widget::handle()
{int value=ui->progressBar->value();if(value>=100){timer->stop();return;}ui->progressBar->setValue(++value);
}
Widget::~Widget()
{delete ui;
}

进度条样式的设计:

QProgressBar {border: 2px solid #ffb6c1; /* 粉色边框*/border-radius: 10px; /* 圆角,让进度条更柔和 */background-color: #fff0f5; /* 背景为浅粉色 */
}QProgressBar::chunk {border-radius: 8px; /* 进度块的圆角,和外框呼应 */background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #ff69b4, stop:1 #ff1493); /* 进度块用亮粉色渐变,很活泼 */
}

Qt 中利用类前置声明减少头文件包含,从而优化编译速度的知识:

核心要点

  1. 前置声明的作用:在 Qt 中,若只需使用类的指针 / 引用类型成员(如 QTimer* timer;),可通过类前置声明(如 class QTimer;),无需在头文件中直接包含 QTimer 的头文件(#include <QTimer>)。因为指针 / 引用的声明不需要知道类的完整定义,只需知道类的存在即可。

  2. 编译速度优化:C/C++ 编译速度慢,与 #include 头文件的复杂依赖关系直接相关。减少头文件包含能有效缩短编译时间。Qt 利用 “前置声明 + 仅在需要时包含头文件” 的方式,降低头文件间的依赖,从而优化编译效率。

  3. 实际开发的权衡:虽然前置声明能优化编译,但实际项目中,若为了开发便捷(避免手动管理头文件依赖),或项目有足够硬件资源(如大厂的 “编译集群”),也可直接包含所需头文件,优先保证开发效率。

简单来说:Qt 用 “类前置声明” 减少头文件包含来加速编译,但实际开发中,也可根据情况灵活选择是否直接包含头文件。

http://www.dtcms.com/a/474411.html

相关文章:

  • 【多线程】阻塞等待(Blocking Wait)(以C++为例)
  • c语言动态内存管理
  • 传媒大气的网站网页设计与制作广东开放大学
  • AI 改变数据库产品实践探索
  • 做企业的网站都要准备什么怎么导出wordpress 整个网站
  • 做博客网站赚钱wordpress论坛社区主题
  • 零代码AI开发:Coze平台
  • Docker版本
  • 基于 Docker 的 MongoDB 部署与使用指南
  • 长沙做网站公司杭州seo外包
  • 南山区搜索引擎优化seo多少钱
  • 联邦学习论文分享:Data-centric Federated Graph Learning with Large LanguageModels
  • 【MySQL】MySQL主从复制原理解析:从二进制日志到数据一致性
  • 数据库设计_理论部分_需求分析
  • 做网站的如何增加电话量2020网络营销推广方式
  • 【人工智能】一文解读什么是ACN,ACN新在哪里?(附思维导图总结)
  • 语言实现基本区块链模型
  • 网站用哪种语言手机照片制作成相册
  • ipad mini第一代现在能做什么
  • 美妆企业网站模板网站推广计划书怎么写
  • openharmony之location位置服务模块核心功能解析与实现原理解读
  • 端口复用技术详解与应用场景
  • 6.1中断的概念
  • 学员作业:探索锁屏、桌面壁纸相关差异显示原理
  • 南通做网站多少钱有专业制作网站的公司吗
  • AI辅助故障自愈:从告警到恢复的4级自动化水平
  • DS题目汇编
  • 前端学习 JavaScript (dom操作)(04)
  • 深圳网站创建公司主页不是wordpress
  • FPGA自学笔记(正点原子ZYNQ7020):2.IP核与组成