【QT】常用控件|QLabel|QLCDNumber|QProgressbar|QCalenderWidget

news2024/11/16 4:54:26

目录

​编辑

QLabel

核心属性

testFormat

自适应pixmap

文本对齐,换行

 Buddy

QLCDNumber

核心属性

倒计时

处理槽函数

QProgressbar

核心属性

QCalendarWidget

核心属性

核心信号


 

QLabel

用来显示文本和图片

核心属性

属性作用
textFormat 

文本的格式;

Qt::PlainText 纯文本(只支持普通的文本信息)

Qt::RichText 富文本 (内容更丰富的文本,支持html)

Qt::MarkdownText markdown格式

pixmapQLabel内部包含的图片
scaledContents设置true会自动拉伸填充QLabel,反之不会
alignment 设置对齐方式,两种对齐方式:水平,垂直
wordWrap设置true后,内部的文本会自动换行,反之不会
indent文本缩进
margin设置文本和边框的边距
buddy关联"伙伴",点击QLabel会激活对应的伙伴;
textQLabl的文本

testFormat

设置文本的格式,不同格式有不同效果。

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //为三个QLabel设置三种标签格式
    ui->label->setTextFormat(Qt::PlainText);
    ui->label->setText("<b>这是一段纯文本</b>");

    ui->label_2->setTextFormat(Qt::RichText);
    ui->label_2->setText("<b>这是一段富文本</b>");

    ui->label_3->setTextFormat(Qt::MarkdownText);
                        //注意 这里##和文本要有空格,几个#就表示几级标题
     ui->label_3->setText("# 这是一段MarkDown文本");
}

自适应pixmap

我们想要达到一个效果,让一张图片自适应窗口的变化

开始: 

1.创建一个标签,创建.prc图片 

 2.我们让标签和父窗口一样大,pixmap就设置成标签一样大。一样的意思。

3.然后我们让pixmap填充满整个窗口

    //添加一个标签,添加一张图片, 让其自适应满足widget填充
    QPixmap pixmap(":/image.png");
    ui->label->setPixmap(pixmap);

    //1.先将标签大小和窗口widget一样大
        //获取父窗口geometry,
        ui->label->setGeometry(this->geometry());
        //自动填充满窗口
        ui->label->setScaledContents(true);

当我们改变窗口大小时,图片并不会跟随变化,我们让图片跟随窗口大小自动填充变化。

在这一步前,先了解resizeEvent(QResizeEvent* event) 

        在用户的操作,会对应一些信号,而Qt中,表示用户的操作有两类概念:事件和信号

当我们拖拽修改窗口时,就会触发一系列resize事件,这样的事件,是连续变化的,从窗口大小A~B时,会触发一系列resizeEvent。此时就可以借助该函数来完成自适应填充。

        该函数,是父类的一个虚函数,子类重写,多态,一个回调函数

    //重父窗口 resizeEvent
void Widget::resizeEvent(QResizeEvent *event)
{
    //重写父类的虚函数
    
    //打印一下位置变化
    qDebug()<<event->size();

    ui->label->setGeometry(0,0,event->size().width(),event->size().height());
}

文本对齐,换行

Alignment:有很多对齐方式,左对齐,水平对齐,垂直对齐等。

wordwrap:是否换行.

{
    ui->setupUi(this);

    ui->label_1->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    ui->label_1->setText("这是一段垂直水平居中的文字");


    ui->label_2->setAlignment(Qt::AlignTop|Qt::AlignLeft);
        //是否换行
    ui->label_2->setWordWrap(true);
    ui->label_2->setText("这是一段非常非常长的文字这是一段非常非常长的文字这是一段非常非常长的文字这是一段非常非常长的文字这是一段非常非常长的文字这是一段非常非常长的文字这是一段非常非常长的文字这是一段非常非常长的文字");

}

 Buddy

标签可以设置按钮为"伙伴",通过快捷键相应对应的按钮

把label中的文本设置为"快捷键&A"这样的形式 ,&后⾯跟着的字符,就是快捷键,通过alt+A的方式来触发该快捷键

    //设置label标签的伙伴 radioButton
    ui->label->setBuddy(ui->radioButton);
    ui->label_2->setBuddy(ui->radioButton_2);

QLCDNumber

是一个用来显示数字的控件;

核心属性

属性作用
intValue显示的数字是整数int
value

显示的数字是double;

设置value,intValue的方法名:dispaly;

digitCount显示几位数字
mode

数字的显示形式:

QLCDNumber::Dec:十进制模式;

QLCDNumber::Hex:十六进制模式;

QLCDNumber::Bin:二进制模式;

QLCDNumber::Oct:八进制;

倒计时

实际上是使用QTimer来定时更新QLCDNumber控件的显示值;

QTimer:用于实现定时器功能,每隔一段时间会触发一次QTimer::timeout信号;

启动和停止:

  • 使用start()方法启动定时器。
  • 使用stop()方法可以停止定时器。

创建一个LCDNumber,初始化为10;

创建声明QTimer成员到widget.h里,声明一个对应处理信号的槽函数updateTime();

public slots:
    void updateTimer();

private:
    Ui::Widget *ui;
    //声明
    QTimer* timer;

因为QT这里做了优化,不需要包含对应的头文件,也能声明各种类;

但是定义中,需要包含对应的头文件;

{
    ui->setupUi(this);
    //ui->lcdNumber->display(10);

    //定义QTimer对象
    timer = new QTimer(this);

    //连接信号槽,QTimer每隔一段时间就会发出一个timeout信号
        //把信号和槽函数连接 : 意味着 每次触发timeout信号,都会有相应的updateTimer处理
    connect(timer,&QTimer::timeout,this,&Widget::updateTimer);

    //启动定时器 单位毫秒  每1000ms都会触发一次timeout信号,伴随着槽函数处理
    timer->start(1000);
}

处理槽函数

该槽函数是处理Qt::timeout信号的;

获取当前的intvalue值,判断是否到临界点,如果到了,就停止定时器;反之继续执行;

QProgressbar

表示一个进度条

核心属性

属性作用
minimum进度条最小值
maximum进度条最大值
value进度条当前值,setvalu:设置值
textVisible进度条数字是否可见

进度条也属于周期性修改界面状态的需求,因此优先考虑定时器

因为Qt中规定,任何对于页面的操作,必须在主线程完成,如果在自己创建的线程去修改界面元素,Qt程序会崩溃;

widget.h文件中,创建QTimer,和处理Qt::timeout信号的槽函数;

widget.cpp,文件中,定义上述函数和成员;

public slots:    //槽函数
    void updateprogressbar();
private:    //成员
    QTimer* timer;
    //为QTimer 对象定义 且生成对应槽函数
    timer = new QTimer(this);

void Widget::updateprogressbar()
{

}

使用connect连接信号和槽,设置每100ms触发一次QTimer::timeout信号,让槽函数相应处理;

{
    ui->setupUi(this);

    //创建一个进度条
    timer = new QTimer(this);

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

    //启动定时器     单位ms  这里相当于一秒触发10次
    timer->start(100);
}
void Widget::updateprogressbar()
{
    //槽函数
    //边界值判定
    int value = ui->progressBar->value();
    if(value>=100)
    {
        //停止定时器
        timer->stop();
        return;
    }
//反之,让进度条的值不断累加
    ui->progressBar->setValue(value+1);
}

QCalendarWidget

表示一个日历

核心属性

selectDate:当前选中的日期

核心信号

 

属性作用
void cursorPositionChanged(int old,int new)当鼠标移动时发出此信号,old为先前的位置,new为新位置;
void editingFinished()当按回车键时,发出信号
void returnPressed()当按下回车键发出信号,如果设置了验证器,必须要先通过验证,才能触发;
void selectionChanged()当选中的文本改变时,改变此信号;
void textChanged(const QString &text)当QLineEdit中的文本改变时,发出信号,修改后才会触发
void textEdited(const QString& text)当QLineEdit中的文本改变时,发出信号,text是新的文本,代码对文本的修改不能触发这个信号;

 创建CalendarWidget控件,创建一个标签;

我们点击日历表时,标签会显示点击的日期时间;

创建calendarWiget的槽函数;

void Widget::on_calendarWidget_selectionChanged()
{
    //当点击日历表,标签显示当前日期
    
    QDate date = ui->calendarWidget->selectedDate();

    ui->label->setText(date.toString());
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1892437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS-实例-div 水平居中 垂直靠上

1 需求 2 语法 3 示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格水平居中、垂直靠上示例…

2023年问界M9 EV 问界M9增程维修手册和电路图线路图资料更新

此次更新了2023年问界M9 EV及问界M9增程维修手册和电路图资料&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表位置等等&#…

python-计算矩阵边缘元素之和(赛氪OJ)

[题目描述] 输入一个整数矩阵&#xff0c;计算位于矩阵边缘的元素之和。 所谓矩阵边缘的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。输入&#xff1a; 输入共 m 1 行。 第一行包含两个整数 m, n (1 < m,n < 100) &#xff0c;分别为矩阵的…

力扣双指针算法题目:移动零

1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 这个题目的思路和“使用递归排序快速排序解决数组的排序问题”相同 class solution { public:void QuickSort(vector<int>& nums, int left, int right){if (left > right) return;int key left…

邮件发送失败DKIM报错问题排查解决的方案?

邮件发送DKIM验证失败的排查方法&#xff1f;DKIM的设置步骤&#xff1f; DKIM作为一种验证机制&#xff0c;帮助确保电子邮件的发件人身份验证和邮件内容完整性。然而&#xff0c;发信时可能会遇到DKIM相关的问题&#xff0c;导致邮件发送失败或报错。AokSend将探讨常见的邮件…

电脑端适用何种便签app 精选电脑桌面便签推荐

在数字化时代&#xff0c;电脑已成为我们日常办公不可或缺的工具。在使用电脑办公的同时&#xff0c;我们经常需要随时记录一些重要信息或工作事项。此时&#xff0c;如果能有一款便捷、高效的桌面便签软件&#xff0c;无疑会大大提升我们的工作效率。想象一下&#xff0c;在繁…

SimpleDateFormat 处理带有毫秒的时间字符串转化为时间不准的问题

SimpleDateFormat 处理带有微秒的字符串转化为时间会导致不准确 下面是代码示例&#xff1a; public static void main(String[] args) throws Exception{String timeStampStr "2024-07-04 10:11:34.800017";System.out.println("带毫秒的时间格式: " …

SAP MARA-VPSTA PSTAT 值的意义

参考 https://www.cnblogs.com/VerySky/articles/2851312.html

Stable Diffusion新手快速入门教程,从0到1,AI绘画最基础教程!

关于Ai绘画&#xff0c;很多人在体验了Midjourney&#xff08;以下简称MJ&#xff09;之后&#xff0c;发现它创意能力很强&#xff0c;但可控性比较弱&#xff0c;不便应用&#xff0c;于是转向Stable Diffussion&#xff08;以下简称SD&#xff09;&#xff0c;但又发现SD貌似…

秒懂设计模式--学习笔记(7)【结构型-门面模式】

目录 6、门面模式6.1 介绍6.2 一键操作6.3 亲自下厨的烦扰6.4 化繁为简6.5 整合共享6.6 门面模式的各角色定义 6、门面模式 6.1 介绍 门面模式&#xff08;Facade&#xff09;可能是最简单的结构型设计模式它能将多个不同的子系统接口封装起来&#xff0c;并对外提供统一的高…

2024年用scrapy爬取BOSS直聘的操作

SCrapy框架实现对BOSS直聘的爬取 文章目录 SCrapy框架实现对BOSS直聘的爬取对SCrapy框架的一个简单认识Scrapy 组件的作用Scrapy 数据流 1. 测试反爬2. 定义一个下载中间件类,截取spiders的请求&#xff08;中间件直接截取请求&#xff0c;并且返回给Spider进行数据解析&#x…

文件扫描pdf怎么弄?5个简易高效的文件扫描方法

在繁忙的工作中&#xff0c;我们常常需要将纸质文件快速转换为电子文档&#xff0c;以便于编辑、存储或分享。 无论是合同、报告还是笔记&#xff0c;将这些纸质文件转换为Word格式&#xff0c;不仅能提高工作效率&#xff0c;还能确保信息的安全备份。然而&#xff0c;面对市…

【LLM大模型】中国人工智能大模型技术白皮书,从0入门大模型,附文档+LLM实战教程

近期&#xff0c;中国人工智能学会发布了《中国人工智能大模型技术白皮书》&#xff0c;系统梳理了大模型技术演进&#xff0c;深入探讨关键技术要素&#xff0c;并剖析当前挑战及未来展望。 我为大家做了简要总结&#xff0c;并附上文档分享给大家。 PDF&#xff1a; 完整版本…

Git 操作总结

1. 安装、Git 环境配置 1.1 安装 Git 官方版本可以在 Git 官方网站下载&#xff1a;打开 https://git-scm.com/download/win&#xff0c;选择相应版本即可。 Git 安装完成后&#xff0c;可以在开始菜单中看到 Git 的三个启动图标&#xff08;Git Bash、Git CMD、Git GUI&…

最新mysql打开远程访问和修改最大连接数

这里写目录标题 1.使用navicat进入命令控制板,进入use mysql;2.查询用户表3.更新user表中root用户域属性&#xff0c;%表示允许外部访问4.执行以上语句之后再执行&#xff0c;FLUSH PRIVILEGES;5. 执行授权语句修改最大连接数 1.使用navicat进入命令控制板,进入use mysql; use…

成都百洲文化传媒有限公司电商服务的佼佼者

在当今这个数字化时代&#xff0c;电商已成为商业发展的核心动力之一。成都百洲文化传媒有限公司&#xff0c;作为一家专注于电商服务的领先企业&#xff0c;正以其卓越的服务质量和前瞻性的战略眼光&#xff0c;引领着电商行业的新潮流。 一、公司简介 成都百洲文化传媒有限公…

SF-HCI-SAP问题收集17:值映射布尔型EC数据

Complacency is the enemy of study 学习的敌人是自己的满足。 SAP SuccessFactors Employee Central 到 SAP ERP 的员工主数据复制 successfactor employee center主数据同步&#xff0c;一直以来排错比较难&#xff0c;难的地方是这个提示消息比较隐晦&#xff0c;而且同步的…

解决 Layout Inspector无法查看Component Tree 布局层级信息 | Android Studio Koala

问题描述 Tool -> Layout Inspector 显示下图&#xff0c;无法生成.li文件查看Component Tree&#xff0c;变成实时的Preview并功能点击操作&#xff0c;跟模拟器一样。 原因&#xff1a;默认勾选了"Enable embedded Layout Inspector"&#xff0c;启用了嵌入式…

Qualcomm QCS6490 开发板运行高通AI HUB图像分类程序

相关代码可以在如下链接下载&#xff1a; ai-hub-models/apps/android/ImageClassification at main quic/ai-hub-models GitHub 所用硬件有&#xff1a; 1. UBUNTU20.04 2. 高通QCS6490 开发板 对下载下来的代码进行编译 1.ubuntu环境配置 1.python环境配置 如果你的…

昇思25天学习打卡营第8天|模型权重与 MindIR 的保存加载

目录 导入Python 库和模块 创建神经网络模型 保存和加载模型权重 保存和加载MindIR 导入Python 库和模块 上一章节着重阐述了怎样对超参数予以调整&#xff0c;以及如何开展网络模型的训练工作。在网络模型训练的整个进程当中&#xff0c;事实上我们满怀期望能够留存中间阶段…