qt:常见标签操作,倒计时功能,进度条与日历

ops/2025/2/21 7:37:02/
1.标签常见函数 
函数功能
void setext(const QString &text)设置文本
QString text()const获取文本
void setPixmap(const QPixmap)与Pixmap()const设置和获取图像
void setAlignment(Qt::Alignment alignment)设置对齐(获取和上面一样)
void setWordWrap(bool on)设置是否需要文本对齐(获取和上面一样)
void setTextFormat(Qt::TextFormat format)设置富文本和纯文本
void clear()清除
富文本包含例如超链接的文本
纯文本没有任何格式信息的文本
2.标签常见文本

四种常见的文本:富文本,纯文本,markdown,自动文本的显示

    l1=new QLabel("富文本",this);l2=new QLabel("纯文本",this);l3=new QLabel("markdown",this);l4=new QLabel("自动文本",this);l1->setTextFormat(Qt::RichText);l2->setTextFormat(Qt::PlainText);l3->setTextFormat(Qt::MarkdownText);l4->setTextFormat(Qt::AutoText);l1->setGeometry(300,100,100,50);l2->setGeometry(300,200,100,50);l3->setGeometry(300,300,100,50);l4->setGeometry(300,400,100,50);

 3.标签图片

现在来演示一下图片标签

  p1=new QLabel(this);QPixmap picture("D:/project/p2.jpg");QRect w=this->geometry();p1->setPixmap(picture);p1->setGeometry(0,0,w.width(),w.height());p1->setScaledContents(true);

设置图片拉伸:重写resizeEvent函数

在头文件中声明,该函数继承于它的父类

void resizeEvent(QResizeEvent *event) override;

然后进行重写

void MainWindow::resizeEvent(QResizeEvent *event)
{QMainWindow::resizeEvent(event);p1->setGeometry(0, 0, this->width(), this->height());}

就可以实现图片缩放

4.利用qt designer设置文本框

在打开qtdesigner,然后在左侧选中QLable的父亲QFrame,将framesheet设置为box,就有框了,如果想要Label,同样方法拖动即可

5.右上角对齐,自动换行,缩进,边距

分布以四个标签来展示以上四个功能

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setText("大家好");ui->label->setAlignment(Qt::AlignRight|Qt::AlignTop);ui->label_2->setText("我是c栈算法小辰哥,我是华中农业大学的一名学生,我的学院是信息学院,我的专业是计科");ui->label_2->setWordWrap(true);ui->label_3->setText("我是c栈算法小辰哥,我是华中农业大学的一名学生,我的学院是信息学院,我的专业是计科");ui->label_3->setWordWrap(true);ui->label_3->setIndent(20);ui->label_4->setText("我是c栈算法小辰哥,我是华中农业大学的一名学生,我的学院是信息学院,我的专业是计科");ui->label_4->setMargin(5);
}Widget::~Widget()
{delete ui;
}

6.伙伴机制与快捷键

在标签中写类似&键盘按键的形式,再利用setBuddy绑定一个伙伴按钮,就可以使用Alt+键盘按键进行选中

   ui->label->setText("&A");// ui->label->setAlignment(Qt::AlignRight|Qt::AlignTop);ui->label->setBuddy(ui->radioButton);

 

7.倒计时项目

QLCDNumber是一种专门显示数字的控件,可以利用它来写

属性性质
intValue显示整数
value浮点数(设置二者方法为display)
digitCount显示数字位数
mode

数字显示形式:
- QLCDNumber::Dec:十进制模式,显示常规的十进制数字。
- QLCDNumber::Hex:十六进制模式,以十六进制格式显示数字。
- QLCDNumber::Bin:二进制模式,以二进制格式显示数字。
- QLCDNumber::Oct:八进制模式,以八进制格式显示数字。
只有在十进制模式下才能显示小数点后的内容。
 

segmentStyle

设置显示风格:
QLCDNumber::Flat:平面的显示风格,数字呈现在一个平坦的表面上。
QLCDNumber::Outline:轮廓显示风格,数字具有清晰的轮廓和阴影效果。
QLCDNumber::Filled:填充显示风格,数字被填充颜色并与背景区分开。

不常用:smallDecimalPoint:设置较小的小数点。当启用时,小数点将使用更小的段来表示,节省空间并提高显示密度。

首先用qt designer拖一个QLCDNumber,将初始值设置为20

然后在头文件里搞一个QTimer成员作为计时器,通过start方法启动后,每个一段时间就会触发一次QTimer::timeout信号,可以将它和Weiget::updateTime进行连接,就能实现每次触发timeout都会有updateTime(这个函数要自己写)

然后进行初始化和设置,具体看代码

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);t=new QTimer(this);connect(t,&QTimer::timeout,this,&Widget::updateTime);t->start(2000);
}Widget::~Widget()
{delete ui;
}
void Widget::updateTime()
{int val=ui->lcdNumber->intValue();if(val<=0){t->stop();return;}ui->lcdNumber->display(val-1);
}

t->start表示计时器从2000毫秒也就是20秒开始计算

在遇到类似问题时,要避免循环(Widget构造函数始终无法执行完毕,界面会显示错误),也不能创建一个线程去执行这个操作(任何GUI操作必须在主线程里)

8.进度条项目

QProgessBar就是进度条项目的主要部分

属性特点
minimum最小值,默认为0
maximum最大值,默认100
value当前值
alignment文本在进度条中的对齐方式:
Qt::AlignLeft:左对齐
Qt::AlignRight:右对齐
Qt::AlignCenter:居中对齐
Qt::AlignJustify:两端对齐
extVisible进度条的数字是否可见。设置为 true 时显示进度数值,false 则隐藏。
orientation进度条的方向是水平还是垂直。
Qt::Horizontal:水平方向
Qt::Vertical:垂直方向
invertAppearance是否朝反方向增长进度。如果设为 true,则进度从最大值向最小值递减。
textDirection文本的朝向。影响文本在进度条中的排列方向。
format展示的数字格式:
%p:表示进度的百分比(0-100)
%v:表示进度的数值(0-100)
%m:表示剩余时间(以毫秒为单位)
%t:表示总时间(以毫秒为单位)

为了提高编译速度,可以使用 class 前置声明的方式来尽量减少头文件的包含,方法就是包含一个头文件(#include),这个头文件包含几乎所有的前置声明,如果不进行创建对象等操作,这种方式是可以的

还是老样子,拖一个进度条在qt designer上,设置初始值为24,再用上我们之前的QTimer,然后就可以有一个进度条了

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

注意,改变颜色后字体须水平居中

9.日历项目

QCalendarWidget是主体

属性特点
selectDate当前选中的日期。
minimumDate最小日期,定义用户可以选择的最早日期。
maximumDate最大日期,定义用户可以选择的最晚日期
firstDayOfWeek每周的第一天(也就是日历的第一列)是周几。
gridVisible是否显示表格的边框,默认为 true 显示边框。
selectionMode是否允许选择日期。可以设置为单选或不选。
navigationBarVisible日历上方标题是否显示,默认为 true 显示导航栏。
horizontalHeaderFormat日历上方标题显示的日期格式,控制顶部标题栏的内容。
verticalHeaderFormat日历第一列显示的内容格式,控制左侧垂直标题栏的内容。
dateEditEnabled是否允许日期被编辑,默认为 false 不可编辑。
信号特点
selectionChanged(const QDate&)当选中的日期发生改变时发出。参数是一个 QDate 类型,保存了新的选中日期。
activated(const QDate&)当双击一个有效的日期或者按下回车键时发出。参数是一个 QDate 类型,保存了选中的日期。
currentPageChanged(int, int)当年份月份改变时发出。参数表示改变后的新年份和月份,分别为 int 类型。

 

 

在界面上创建一个 QCalendarWidget 和一个 label,objectName 分别为 calendarWidget,label

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->calendarWidget, &QCalendarWidget::selectionChanged, this, &Widget::changedate);
}
void Widget::changedate()
{QDate d=ui->calendarWidget->selectedDate();qDebug()<<d;ui->label->setText(d.toString());
}
Widget::~Widget()
{delete ui;


http://www.ppmy.cn/ops/160186.html

相关文章

DeepSeek+kimi自动生成ppt

AI自动生成ppt 描述需求&#xff0c;生成大纲 在deepseek里输入需求&#xff0c;https://chat.deepseek.com/&#xff0c; 或者在其它AI搜索里&#xff0c;如kimi中Kimi.ai - 会推理解析&#xff0c;能深度思考的AI助手 搜索后会得到大纲&#xff0c;复制出来。 打开KIMI …

【HarmonyOS Next】鸿蒙监听手机按键

【HarmonyOS Next】鸿蒙监听手机按键 一、前言 应用开发中我们会遇到监听用户实体按键&#xff0c;或者扩展按键的需求。亦或者是在某些场景下&#xff0c;禁止用户按下某些按键的业务需求。 这两种需求&#xff0c;鸿蒙都提供了对应的监听事件进行处理。 onKeyEvent 默认的…

当滑动组件连续触发回调函数的三种解决办法

1. 节流&#xff08;Throttle&#xff09; 节流是一种限制函数调用频率的技术&#xff0c;它会在一定时间内只允许函数执行一次。在滑动组件中使用节流可以避免短时间内的连续触发。 Entry Component struct ThrottleSlideExample {// 节流时间间隔&#xff0c;单位为毫秒pri…

Git安装

一、下载安装包 连接 二、详细安装 三、环境配置 1. 设置 Git 全局用户名和邮箱 git config --global user.name "gitxiewei" git config --global user.email "returnxw163.com" 2. 验证配置 git config --global --list 3. 设置别名 在4在文件夹中找…

推荐一个github star45k+进阶的java项目及知识的网站

mall是github上star 45k的一个java项目 mall项目是一套电商系统&#xff0c;包括前台商城系统及后台管理系统&#xff0c;基于SpringBootMyBatis实现&#xff0c;采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心…

C/C++面试知识点总结

目录 1. 指针1.1 智能指针1.2 指针和引用的区别1.3 数组和指针的区别1.4 数组指针和指针数组的区别1.5 迭代器和指针的区别1.6 strcpy 和 memcpy 的区别 2. 内存管理与分配2.1 内存分配与存储区2.2 malloc / free2.3 volatile和extern的区别2.4 拷贝构造函数2.5 预处理、编译、…

接口测试-API测试中常用的协议(中)

一、SOAP SOAP&#xff08;Simple Object Access Protocol&#xff09;即简单对象访问协议&#xff0c;是一种基于 XML 的用于在网络中交换结构化信息的协议&#xff0c;常用于 Web 服务之间的通信。以下为你详细介绍&#xff1a; 产生背景 在互联网发展过程中&#xff0c;需…

析言GBI:用自然语言交互重构企业数据分析范式

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、Java 与 Python 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在未来…