Qt第三课 ----------显示类的控件属性

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


显示类

  • **作者前言**
  • QLabel
    • text
    • textFormat
    • pixmap
    • scaledcontents
    • Qlabel的常用属性
    • 设置按钮
  • QLCDNumber
  • QProgressBar
  • QTimer的简单介绍
  • QCalendar Widget

QLabel

这个是一个文本类,可以显示文字和图片的, 主要的 属性如下

text

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);label->setText("这个是一个文本,用来练习");qDebug()  << label->text();
}

如图:
在这里插入图片描述

textFormat

这个是设置文本的格式的,
格式如下:
Qt::PlainText 纯⽂本
Qt::RichText 富⽂本(⽀持 html 标签)
Qt::MarkdownText markdown 格式
Qt::AutoText 根据⽂本内容⾃动决定⽂本格式.
下面我们一一介绍,
Plaintext这个格式是纯文本格式, 写入里面的内容都是文本

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);label->setText("这个是一个文本,用来练习Plaintext");label->setTextFormat(Qt::PlainText);//普通文本QLabel* labelOne = new QLabel(this);labelOne->setText("<b>这个是一个文本,用来练习Plaintext<\b>");labelOne->setTextFormat(Qt::PlainText);//富文本label->move(0,50);}

如图:
在这里插入图片描述
输入里面的任何都是文本,代码中的\b被当成了一个空格,不用在意,

当我们使用富文本的 时候如下:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);label->setText("这个是一个文本,用来练习RichText");label->setTextFormat(Qt::RichText);//普通文本QLabel* labelOne = new QLabel(this);labelOne->setText("<h1>这个是一个文本,用来练习RichText<\\h1>");labelOne->setTextFormat(Qt::RichText);//富文本labelOne->move(0,100);
}

如图:
在这里插入图片描述
当我们使用html标签的时候,是会有效果的,这个就是富文本

我们来看看mackdown text格式

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);label->setText("这个是一个文本,用来练习RichText");label->setTextFormat(Qt::MarkdownText);//普通文本QLabel* labelOne = new QLabel(this);labelOne->setText("# 这个是一个文本好哈,用来练习RichText");labelOne->setTextFormat(Qt::MarkdownText);//富文本labelOne->move(0,100);//    qDebug()  << label->text();
//    QPixmap pixmap(":/new/one.jpg");
//    label->setPixmap(pixmap);
//    label->setScaledContents(true);
}

如图:
在这里插入图片描述
可以看出,在markdowntext格式中不同于Richtext, 它有属于自己的一套标签,跟html是一个意思,

pixmap

显示图片
前面我们在自定义鼠标图片时,介绍过QPixmap,
下面我们代码演示

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);QPixmap pixmap(":/new/one.jpg");label->setPixmap(pixmap);}

如图:
在这里插入图片描述

scaledcontents

这个是可以自由拉伸窗口的属性


Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);QPixmap pixmap(":/new/one.jpg");label->setPixmap(pixmap);label->setScaledContents(true);
}

​如图:

在这里插入图片描述
这个不会设置图片的大小,只负责窗口的拉伸,因为Qlabel的尺寸已经固定了,只有设置QLabel随着窗口的大小时刻发生改变,当我们拉伸这个窗口,会触发一个resize事件(resizeevent),是一个连续变化的,这个和我们之前的学过的connect是不一样的,
我们需要进行重写一下QWidget的resizeEvent这个虚函数,这个函数会在我们拖动窗口的尺寸会自动调用
.h

class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();virtual void resizeEvent(QResizeEvent *event);private:Ui::Widget *ui;QLabel* label;
};

.cpp

void Widget::resizeEvent(QResizeEvent *event)
{qDebug()<< event->size();label->setGeometry(0,0,event->size().width(),event->size().height());}

如图:
在这里插入图片描述
我们拉伸窗口.这个图片就会随着窗口变化而变化

Qlabel的常用属性

为了更加的观察接下来的现象,这里引入一个frameShape属性,这个是设置文本的边框的样式
在这里插入图片描述
其中的属性值有如下:

QFrame::Box :矩形边框
• QFrame::Panel :带有可点击区域的⾯板边框
QFrame::WinPanel :Windows⻛格的边框
• QFrame::HLine :⽔平线边框
• QFrame::VLine :垂直线边框
• QFrame::StyledPanel :带有可点击区域的⾯板边框,但样式取决于窗⼝主题

可以看出,这个属性是父类Qframe的属性,接下来。我们设置几个Qlabel来演示:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建4个, 设置边框QLabel *label1 = new QLabel(this);label1->setText("我是一段文字");label1->setGeometry(0,0,1000,250);QLabel *label2 = new QLabel("我是一段文字",this);label2->setGeometry(label1->geometry().x(),label1->geometry().y()+label1->geometry().height()+5,label1->geometry().width(),label1->geometry().height());QLabel *label3 = new QLabel("我是一段文字",this);label3->setGeometry(label1->geometry().x(),label2->geometry().y()+label1->geometry().height()+5,label1->geometry().width(),label1->geometry().height());QLabel *label4 = new QLabel("我是一段文字",this);label4->setGeometry(label1->geometry().x(),label3->geometry().y()+label1->geometry().height()+5,label1->geometry().width(),label1->geometry().height());label1->setFrameShape(QFrame::Box);label2->setFrameShape(QFrame::Box);label3->setFrameShape(QFrame::Box);label4->setFrameShape(QFrame::Box);//开始给每个QLabel设置一个属性. 对齐、缩进, 自动换行, 边距}

如图:
在这里插入图片描述

对齐方式 alignment
对齐方式简单的介绍, 在AlignmentFlag枚举中有多个
在这里插入图片描述

label1->setAlignment(Qt::AlignRight|Qt::AlignBottom);

如图:
在这里插入图片描述
需要注意的是|是一个异或操作符,用来AlignmentFlag枚举里面的值进行操作的
如果想实现不同的对齐方式可以使用|这个操作符

缩进indent

//缩进label2->setIndent(50);//缩进50像素

如图:
在这里插入图片描述
需要注意的是,这样设置不仅仅是首行进行缩进,而是每行都会缩进

边距 margin

 //边距label3->setText("水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水是杀杀杀杀杀杀杀杀杀杀杀杀杀杀杀是是");label3->setMargin(50);

如图:
在这里插入图片描述
自动换行 wordwrap

//自动换行label4->setText("速度快撒娇撒扩大就是看电视咯大厦结婚的上来看大厦刘德华就撒开了大厦士大夫立刻啥的就会受到就撒娇的卡卡罗实践活动看啥打开拉萨大厦还打啥电话夸奖哈的空间撒谎就看撒抠脚大汉时刻");label4->setWordWrap(true);

如图:
在这里插入图片描述

设置按钮

前面我们也学习了按钮。我们可以往QLabel里面写入按钮, 这里需要的属性就是buddy

QLCDNumber

这是一个显示数字的控件, 一般用于时间,也可以使用到显示数值的区域
其属性如下:
在这里插入图片描述
在这里插入图片描述
下面我们来一一演示一下对应的效果怎么样
我们写一个倒计时,需要每隔一秒数值减1,类似定时器
注意:在C++中没有提供定时器,但是在QT中封装了对应的定时器(结合了信号和槽)
这里需要引入头文件, QTimer,
通过这个类创建出的对象, 会产生一个timeout的信号, 通过start的方法来开启定时器,并且参数中设置timeout信号的周期


Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);int digth = 10;QLCDNumber* timeOne = new QLCDNumber(this);timeOne->display(digth);timeOne->setGeometry(this->geometry().width()/2, this->geometry().height()/2,500,200);QTimer* time = new QTimer(this);connect(time, &QTimer::timeout,this, [=](){timeOne->display(timeOne->value()-1);if(digth == 0)time->stop();//停止定时器 });//启动定时器time->start(1000);//周期是1s, 触发一次timeout, 单位为ms
}

value和intvalue是获取数值的属性, display是变更数值的属性,
除了这种方法,我们还可以使用sleep来进行,但是这个只是windos的api,需要导入windos.h头文件,只能在Vs中使用, 但是在QT中是无法使用的,从C++11开始,引入了这个sleep_for,需要引入头文件, thread

#include<thread>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLCDNumber* number = new QLCDNumber(this);number->display(10);number->setGeometry(20,20, 500,100);while (true){//休眠std::this_thread::sleep_for(std::chrono::seconds(1));//std::this_thread获取当前进程, std::chrono::seconds(1)休眠1sif(0 == number->value())break;number->display(number->value()-1);}}

如果我们使用这个代码去运行,就会发现, 结果直接等待十秒后才显示,
如图:
在这里插入图片描述
原因如下:
在这里插入图片描述
因为我们的代码是在构造函数中写的,显示出来的时候已经把构造函数里面的代码都运行完毕了,显示出来就是最终的结果,也就是十秒后的结果,

有些人可能会想到使用线程
我们可以通过创建一个线程用来执行算数的代码片段,


Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLCDNumber* number = new QLCDNumber(this);number->display(10);number->setGeometry(20,20, 500,100);std::thread t([=](){while (true){//休眠std::this_thread::sleep_for(std::chrono::seconds(1));//std::this_thread获取当前进程, std::chrono::seconds(1)休眠1sif(0 == number->value())break;number->display(number->value()-1);}});}

当我们运行出来就会发现
如图:
在这里插入图片描述
这里出现了一个错误,这个错误的原因主要是在QT中, 界面由一个线程进行控制的,也就是含有main函数的主线程,QT为了保护线程的安全,禁止被其他线程影响,只能在主线程进行修改,如修改界面,我们写的代码就是修改了界面的值,

QProgressBar

进度条
相关属性如下:
在这里插入图片描述
在这里插入图片描述
下面我们一一来演示

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建一个进度条QProgressBar* progress = new QProgressBar(this);progress->setGeometry(20,20,1000,200);progress->setMinimum(0);//设置最小值progress->setMaximum(100);//设置最大值progress->setAlignment(Qt::AlignLeft);//设置对齐方式progress->setOrientation(Qt::Horizontal);//设置方向progress->setFormat("%p%");//设置文本格式//创建一个定时器QTimer* time = new QTimer(this);connect(time, &QTimer::timeout, this, [=](){progress->setValue(progress->value()+1);if(progress->value()==100){time->stop();qDebug()<<"运行结束";}});time->start(100);//启动定时器}

如图:
在这里插入图片描述
这里使用了定时器来演示一个进度条
如果我们还可以进一步的更改一下进度条的颜色,这里就要涉及到styleshet样式了

progress->setStyleSheet("QProgressBar::chunk {background-color: rgb(64, 65, 66);}");

如图:
在这里插入图片描述
这里有一个bug,文字显示在左上角了

QTimer的简单介绍

这里需要声明一点, 关于QTimer头文件,在没有引入头文件的时候,是可以声明这个QTimer的指针或者引用的,因为在Qt中有一个专门的头文件包含了Qt中所有类的声明,也就是前置声明, 例如
在这里插入图片描述

我们创建出来的代码包含的头文件里面就间接包含了这个专门的头文件, 如果我们想要真正使用和创建这个定时器,还是需要导入头文件QTimer,否则哪怕我们在类中声明了相关指针或者引入,实例化出来也是会报错的,

QCalendar Widget

日历
这个是设置日历的
主要的属性如下:
在这里插入图片描述
还有一些信号函数如下:
在这里插入图片描述
一般常用的信号是第一个,下面就简单演示一下

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QCalendarWidget* calender = new QCalendarWidget(this);calender->setSelectionMode(QCalendarWidget::SelectionMode::SingleSelection);//是否可以设置日期
//    calender->setDateEditEnabled(true);connect(calender, &QCalendarWidget::selectionChanged, this, [=](){QDate a = calender->selectedDate();qDebug()<<a;});
}

如图:
在这里插入图片描述
其他属性的话,可以自行探索,

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

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

相关文章

美团Java一面

美团Java一面 9.24一面&#xff0c;已经寄了 收到的第一个面试&#xff0c;表现很不好 spring bean生命周期 作用域&#xff08;忘完了&#xff09; 为什么用redis缓存 redis和数据库的缓存一致性问题 redis集群下缓存更新不一致问题 aop说一下 arraylist和linkedlist 数据库的…

kali(专业的渗透测试虚拟机)|kali下载链接地址 |kali安装 |kali部署指南

介绍 kali 是Debian开源linux系统体系下的子分支之一 Debian-kali 扩展&#xff1a;Ubuntu也是Debian开源linux系统体系下的子分支之一 Debian-ubuntu 安装kali 2023.03 稳定版 Index of /kali-images/kali-2023.1/ 安装可以参考他的教程&#xff0c; 写的很详细了…

C语言-数据结构 折半查找

在折半查找中&#xff0c;刚开始学可能会在下标处产生困惑&#xff0c;例如奇数个长度的数组怎么处理&#xff0c;偶数个长度的数组怎么处理&#xff0c;不需要修改代码吗&#xff1f;并且下标我从1开始算和0开始算影响代码吗&#xff1f;其实都可以用一样的代码&#xff0c;产…

nginx 资料整理(三)- web

nginx 资料整理&#xff08;三&#xff09; 1. web服务器1. 日志功能1. 访问日志2. 错误日志3. 实例演示 2. 网站功能列表1. autoindex2. autoindex_localtime 3. 认证功能1. auth_basic2. 实例演示 4. 访问控制功能1. allow & deny2. 局限性3. 实例演示 5. 状态模块1. stu…

论文阅读:Split-Aperture 2-in-1 Computational Cameras (二)

Split-Aperture 2-in-1 Computational Cameras (一) Coded Optics for High Dynamic Range Imaging 接下来&#xff0c;文章介绍了二合一相机在几种场景下的应用&#xff0c;首先是高动态范围成像&#xff0c;现有的快照高动态范围&#xff08;HDR&#xff09;成像工作已经证…

多种方式确定Linux是CentOS还是Ubuntu

目录 前言正文 前言 对应的基本知识比较少&#xff0c;以下只是记录总结 由于目前使用的是centos&#xff0c;后续找到linux会对应补充 正文 要确定Linux系统是CentOS还是Ubuntu&#xff0c;可以通过以下几种方式进行分析 一、查看发行版信息文件&#xff1a; CentOS&…

校园系统校园小程序 论坛校园圈系统失物招领、闲置二手、跑腿外卖等校园圈子系统应该具备有哪些功能

针对校园系统、校园小程序、论坛校园圈系统以及失物招领、闲置二手、跑腿外卖等具体功能&#xff0c;一个综合性的校园圈子系统应该具备以下主要功能&#xff1a; 前后端源码查看 一、基础功能 用户注册与登录 提供用户注册和登录功能&#xff0c;支持学生身份验证、手机号验…

WireShark过滤器

文章目录 1. **捕获过滤器&#xff08;Capture Filter&#xff09;**语法格式&#xff1a;常见捕获过滤器示例&#xff1a; 2. **显示过滤器&#xff08;Display Filter&#xff09;**语法格式&#xff1a;常见比较运算符&#xff1a;常见显示过滤器示例&#xff1a;逻辑操作符…

Linux系统:apt-get update 和apt update区别

apt-get update 和apt update区别 ‌apt-get update和apt update的主要区别在于它们所属的命令集以及在现代Ubuntu系统中的使用推荐。‌ ‌所属命令集‌&#xff1a;apt-get update是apt-get命令的一部分&#xff0c;而apt update是apt命令的一部分。apt是apt-get的替代工具&am…

苹果秋季盛典:iPhone 16系列引领未来科技潮流

9月10日&#xff0c;苹果公司在众人瞩目中举办了2024年的秋季特别活动&#xff0c;发布了备受期待的iPhone 16系列。 尽管网络发布会已经持续了一整年&#xff0c;但熬夜观看的果粉们仍然热情不减&#xff0c;因为每一次苹果的新品发布都代表着科技界的一次重大飞跃。 iPhone …

Android常用组件

目录 1. TextView 控件 常用属性: 1&#xff09;android:text: 2&#xff09;android:gravity: 3&#xff09;android:textSize: 4&#xff09;android:textColor: 5&#xff09;android:background: 6&#xff09;android:padding: 7&#xff09;android:layout_width 和 andr…

嵌入式C语言中链表的插入实现方法

大家好,今天主要给大家分享一下,如何使用链表插入功能。 第一:嵌入式中链表具体实现 链表查找思路:从链表的a0起,判断是否为第i结点,若是则返回该结点的指针,否则查找下一结点,依次类推。 具体代码的链表插入实现: linklist Locate(linklist_t h, data_t x) { …

Android车载——VehicleHal运行流程(Android 11)

1 概述 本篇主要讲解VehicleHal的主要运行流程&#xff0c;包括设置属性、获取属性、订阅属性、取消订阅、持续上报属性订阅等。 2 获取属性流程 2.1 获取属性流程源码分析 作为服务注册到hwServiceManager中的类是VehicleHalManager&#xff0c;所以&#xff0c;CarServic…

WOFOST模型与PCSE模型

农作物生长模型概述 1、介绍农作物生长模型的用途和应用领域 2、比较WOFOST模型和PCSE模型的特点和优势 数据准备 1、气象数据&#xff1a; 数据类型&#xff1a;温度、降水、湿度、风速等气象要素数据。 数据格式&#xff1a;时间序列数据&#xff0c;通常以日为单位。 …

使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序

作者&#xff1a;来自 Elastic Jeff Vestal 在这篇博客中&#xff0c;我们将使用 Elastic 的 Playground 和 Vertex AI API 将 Elasticsearch 连接到 Google 的 Gemini 1.5 聊天模型。将 Gemini 模型添加到 Playground 使 Google Cloud 开发人员能够快速建立 LLM、测试检索、调…

宠物空气净化器怎么选?希喂、霍尼韦尔、美的宠物哪款除毛好?

身为养宠五年的资深铲屎官&#xff0c;最近收到了很多新手养宠朋友关于宠物空气净化器的挑选疑问。宠物空气净化器作为宠物领域目前最火热的产品&#xff0c;谈论度一直很高&#xff0c;评价也褒贬不一。双十一购物节又即将到来&#xff0c;大家都想赶上这一波优惠活动。 铺天盖…

低代码工单管理app评测,功能与效率解析

预计到2030年&#xff0c;低代码平台市场将达1870亿美元。ZohoCreator助力企业构建定制化软件应用&#xff0c;以建筑行业工作订单管理app为例&#xff0c;简化流程&#xff0c;提升管理效率&#xff0c;降低成本。其用户友好界面、自动化管理、跨平台使用及全面报告功能受企业…

基于差分进化灰狼混合优化的SVM(DE-GWO-SVM)数据预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 DE优化 4.2 GWO优化 5.完整程序 1.程序功能描述 基于差分进化灰狼混合优化的SVM(DE-GWO-SVM)数据预测算法matlab仿真&#xff0c;对比SVM和GWO-SVM。 2.测试软件版本以及运行结果展示…

实施威胁暴露管理、降低网络风险暴露的最佳实践

随着传统漏洞管理的发展&#xff0c;TEM 解决了因攻击面扩大和安全工具分散而产生的巨大风险。 主动式 TEM 方法优先考虑风险并与现有安全工具无缝集成&#xff0c;使组织能够在威胁被有效利用之前缓解威胁。 为什么威胁暴露管理 (TEM) 在现代网络安全策略中变得至关重要&…

获取时隔半个钟的三天

摘要&#xff1a; 今天遇到需求是配送时间&#xff0c;时隔半个钟的排线&#xff01;所以需要拼接时间&#xff01;例如2024-10-08 14&#xff1a;30&#xff0c;2024-10-08 15&#xff1a;00&#xff0c;2024-10-08 15&#xff1a;30 <el-form-item label"配送时间&a…