目录
Qlabel的属性
该属性常用于显示文本和图片。

**格式:**在设置文本的格式testformat后,不同文本之间语法是并不互通的,<b></b>用于html格式,#等用于markdowntest格式。
图片:
cpp
// 先把 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的属性(计算器)


定时器的设定:
方式一:
cpp
#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 的周期,单位是 ms
timer->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;
进度条:
cpp
#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;
}
进度条样式的设计:

cpp
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 中利用类前置声明减少头文件包含,从而优化编译速度的知识:
核心要点
-
前置声明的作用 :在 Qt 中,若只需使用类的指针 / 引用类型成员(如
QTimer* timer;
),可通过类前置声明 (如class QTimer;
),无需在头文件中直接包含QTimer
的头文件(#include <QTimer>
)。因为指针 / 引用的声明不需要知道类的完整定义,只需知道类的存在即可。 -
编译速度优化 :C/C++ 编译速度慢,与
#include
头文件的复杂依赖关系直接相关。减少头文件包含能有效缩短编译时间。Qt 利用 "前置声明 + 仅在需要时包含头文件" 的方式,降低头文件间的依赖,从而优化编译效率。 -
实际开发的权衡:虽然前置声明能优化编译,但实际项目中,若为了开发便捷(避免手动管理头文件依赖),或项目有足够硬件资源(如大厂的 "编译集群"),也可直接包含所需头文件,优先保证开发效率。
简单来说:Qt 用 "类前置声明" 减少头文件包含来加速编译,但实际开发中,也可根据情况灵活选择是否直接包含头文件。
QCalendarWidget(日历)



目的:期望日期改变时,Qlabel进行显示;
代码:
cpp
#include "widget.h"
#include "ui_widget.h"
#include"QDebug"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_calendarWidget_selectionChanged()
{
QDate date=ui->calendarWidget->selectedDate();
qDebug()<<date;
ui->label->setText(date.toString());
}
