目录

一、QLabel

1.属性

2.设置文本格式

3.设置图片

4.设置文本对齐方式

5.设置自动换行

6.设置缩进

7.设置边距

8.设置伙伴关系

二、LCD Number

1.属性

2.Qt仅允许主线程修改界面 

三、QProgressBar

属性

四、QCalendarWidget

属性


一、QLabel

同样的,QLabel也是QWidget的子控件,QWidget拥有的属性同样适用于QLabel。

QLabel也有众多属性,主要用来显示文字信息,属于显示类控件。

1.属性

用于获取其中的文本。
QLabel->text();
QLabel->textFormat();
获取文本的格式,Qt中文本的格式可以是以下几种。
1.Qt::PlainText纯文本。
2.Qt::RichText富文本,即文本中支持html标签等,富文本可以理解为word工具编辑中的文件。
3.Qt::MarkdownText 即MD格式的文本。
4.Qt::AutoText 根据文本内容自动决定文本格式。
QLabel->pixmap();
可以设置QLable内中包含的图片。
QLabel->scaledContents();
是否拉伸填充,true 或者false,往往在QLabel中有图片时设置。
QLabel->alignment();
设置QLabel中文本的对齐方式,常见的有居中、靠左。
QLabel->wordWrap();
设置QLabel中长文本是否要自动换行,因为不同于QTextEdit这样的控件,QLabel不含滚动条。
QLabel->indent();
设置文本缩进。
QLabel->margin();
设置内部文本和边框的边距。
QLabel->openExternalLinks();
如果QLabel中包含一段url,设置是否允许点击访问。
QLabel->buddy();
给QLabel关联一个伙伴,点击QLabel即可激发伙伴,如关联QCheckBox,点击则选中它。

2.设置文本格式

    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("# 这是MD的一级标题");

演示效果:

3.设置图片

    //设置Label的尺寸和窗口一样大QRect windowRect = this->geometry();ui->label->setGeometry(0,0,windowRect.width(),windowRect.height());//设置Label中的图片QPixmap pixmap(":/R-C.jpg");ui->label->setPixmap(pixmap);//设置图片拉伸填充ui->label->setScaledContents(true);

但是在构造函数中的设置是一次性的,在后续拖动窗口大小时,标签的尺寸并不会发生改变,于是,就有下面这样的现象:

要想让图片大小跟随窗口尺寸的变化,实现这样一个效果,需要用到Qt中的事件机制。

Qt中对于用户的操作分为了两类,这两类分别是信号槽机制、事件机制。

如何理解这两种机制,本质上是离散变量和连续变量的区分,在Qt中,类似于鼠标点击这样的操作,一次点击、两次点击.....是可以枚举的,属于离散变量,Qt用信号槽机制来处理,而对于拖动窗口变化尺寸这样的操作,比如从A尺寸变化到B尺寸,本质上经过了一系列的尺寸变化,并不是直接由A变到B,对于这种连续的变化,Qt用事件机制来处理。

而对于窗口尺寸的变化,Qt用resizeEvent函数来处理,QWidget定义了该函数,而现在要想让窗口尺寸的变化按照程序员的想法实现,需要重写QWidget中的虚函数,实际上,在框架编程中,Qt可以通过多态的方式来调用程序员重写的函数,并不需要程序员来调用。

在widget.h中添加声明
void resizeEvent(QResizeEvent *event) override;

void Widget::resizeEvent(QResizeEvent *event)
{//打印观察变化中的窗口尺寸qDebug() << event->size();//设置QLabel的尺寸变化跟随窗口ui->label->setGeometry(0,0,event->size().width(),event->size().height());
}

4.设置文本对齐方式

//水平、垂直方向都居中。
ui->label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

5.设置自动换行

ui->label->setWordWrap(true);

6.设置缩进

ui->label->setIndent(50);//缩进50个像素

在Qt中,这样设置缩进后,如果文本换行,也是会缩进的,不仅仅是首行会缩进。

7.设置边距

ui->label->setMargin(50);
//边距是上下左右都留出对应的像素,如果文本长,则牺牲文本的显示效果。

8.设置伙伴关系

 ui->label->setBuddy(ui->radioButton);ui->label_2->setBuddy(ui->radioButton_2);

 可以通过按下 Alt + A、Alt+B的快捷键选中单选框。

二、LCD Number

1.属性

 定时器功能:

C++标准库没有实现定时器的功能,但是Boost实现了,可以使用。同样的,Qt也实现了定时器功能,利用的是信号槽机制。QTimer类的对象可以发出timeout的信号,在start方法中设置参数,这个参数用来说明:QTimer类的对象每隔几秒发出timeout的信号,而每次发出信号,就去执行槽函数,从而实现倒计时的程序。

    timer = new QTimer(this);//timeout信号绑定槽函数connect(timer,&QTimer::timeout,this,&Widget::handle);//设置每隔几秒发送信号timer->start(1000);

void Widget::handle()
{//先获取当前的值int value = ui->lcdNumber->intValue();if(value <= 0){timer->stop();}else{ui->lcdNumber->display(value -1);}
}

2.Qt仅允许主线程修改界面 

上述倒计时程序使用QTimer来实现了定时器,那么是否可以使用C++标准库中的函数,使得每隔一秒,就更新一次界面呢。

那么怎么用C++标准库实现休眠一秒。

在C++98中,是没有这样的函数的,但是在C++11中,有一个函数叫做sleep_for

在头文件<thread>中,有一个this_thread的命名空间,其中实现了一个sleep_for的函数。

在头文件<chrono>中,有一个类名为seconds,用来表示秒,是类模板duration实例化出来的类。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//先获取初始值int val = ui->lcdNumber->intValue();while(true){//休眠1sstd::this_thread::sleep_for(std::chrono::seconds(1));if(val <= 0)break;val -=1;ui->lcdNumber->display(val);}
}

这段代码实际上,只有计数结束才会显示LCD Number,因为我们把倒计时的操作写在了Widget的构造函数中,当构造函数执行完毕,倒计时也结束,所以只显示了最终结果。

于是,设计这样一种做法,在构造函数中,新启一个线程执行上述操作,主线程做展示界面,而新线程做倒计时,是否可行呢?

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);std::thread t([this](){//先获取初始值int val = this->ui->lcdNumber->intValue();while(true){//休眠1sstd::this_thread::sleep_for(std::chrono::seconds(1));if(val <= 0)break;val -=1;this->ui->lcdNumber->display(val);}});
}

然后实际运行启动后,控制台打印了一条日志。

对于Qt这样的GUI框架,需要专门维护一个线程用来更新界面,就是main函数所在的进程,即主线程,而一个界面中,存在很多隐藏的状态,Qt为了更新界面时,不引发线程安全问题,直接禁用了Qt中的其他线程修改界面,于是,我们上面自己新启的线程会被直接中止。

默认情况下,调用槽函数的都是主线程。

在main.cpp中的
return a.exec();

执行a.exec()后,主线程就会进入“事件循环”的状态,exec()内部是一个死循环,每一次循环,都在执行一些操作。

 

三、QProgressBar

属性

表示一个进度条

 

我们设置一个程序,每隔100ms进度条就加一

 

void Widget::handle()
{int value = ui->progressBar->value();if(value >= 100)timer->stop();ui->progressBar->setValue(value+1);
}

 

 

可以设置进度条的颜色。

 

 

四、QCalendarWidget

表示一个日历

属性

 

 

常见信号

 

 

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

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

相关文章

打造可靠的云基础架构:Azure 区域与可用性区域

随着企业业务的全球化扩展和数字化转型&#xff0c;可靠性已成为企业在选择云平台时的重要考量因素。Azure 作为全球领先的云计算服务提供商&#xff0c;通过区域&#xff08;Regions&#xff09;和可用性区域&#xff08;Availability Zones&#xff09;为企业构建高可用性、高…

订单初版—1.分布式订单系统的简要设计文档

大纲1.订单系统核心业务流程2.Spring Cloud Alibaba在订单业务中的落地方案3.面向分布式全链路故障设计的高可靠架构方案4.分布式订单系统的技术栈与代码规范1.订单系统核心业务流程(1)生成订单时序图(2)支付订单流程图(3)取消订单流程图这里主要介绍生单和退款两个核心链路&am…

【HarmonyOS】富文本编辑器RichEditor详解

【HarmonyOS】富文本编辑器RichEditor详解 一、前言 在信息化高速发展的今天&#xff0c;普通的文本容器&#xff0c;已经不能够承载用户丰富的表达欲。富文本展示已经是移动开发中&#xff0c;必备要解决的问题&#xff0c;在鸿蒙中&#xff0c;通过在系统层提供RichEditor控件…

【MySQL进阶】在一台机器上运行多个MySQL实例

目录 1.使用MySQL Installer安装MySQL实例 1.1.去官网下载MySQL Installer 1.2.停止mysql服务 1.3.为不同的版本指定不同的安装目录 2.配置不同版本的选项文件 2.1.修改数据目录 2.2.修改基本目录 2.3.修改端口号 2.4.设置⽇志⽬录 2.5.配置临时目录 2.6.修改绑定地…

verilog中timescale指令的使用

1.timescale指令格式timescale <时间单位> / <时间精度>时间单位&#xff1a;它确定了仿真中时间值的基本单位。比如 1ns 就意味着时间值是以纳秒为单位来计量的。 时间精度&#xff1a;该参数决定了时间值能够表示的最小分辨率。例如 1ps 表示时间可以精确到皮秒级…

08_Excel 导入 - 用户信息批量导入

08_Excel 导入 - 用户信息批量导入 1. VO 类 java复制编辑Data AllArgsConstructor NoArgsConstructor public class UserInfoBatch4ExcelReq {ExcelProperty(value "用户姓名")Schema(description "用户姓名")private String userName;ExcelProperty(va…

【深度学习新浪潮】什么是世界模型?

世界模型(World Model)是人工智能领域中一类通过构建环境的抽象表示来理解和预测外部世界的系统。它通过整合多模态数据(如视觉、语言、传感器信号)形成对环境的动态认知,并支持智能体在复杂场景中进行决策与规划。以下从核心概念、解决的问题、关键研究、技术路线、现状与…

React + Express 传输加密以及不可逆加密

一、传输加密这里用 对称加密模式 ASE实现。React 前端const CryptoJS require("crypto-js");// 示例1&#xff1a;ECB模式&#xff08;无需IV&#xff09; const encryptECB (plainText, key) > {return CryptoJS.AES.encrypt(plainText, key, {mode: CryptoJS…

浏览器(Chrome /Edge)高效使用 - 内部命令/快捷键/启动参数

今天在CSDN上传文件,提交总是提示续传失败,重试了五六次才想到获取是科学上网的问题,这个时候其实只要重启浏览器即可,但如果手动关闭浏览器再次打开,浏览器不会恢复之前的多开窗口(会恢复最后一个窗口内多开的标签页,但不会恢复其他窗口)。想了想记得 Chrome 流行的时…

【PTA数据结构 | C语言版】连续子序列最大和

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录 题目代码 题目 给定 n 个整数组成的序列 { a1 ,a2 ,⋯,an }&#xff0c;“连续子序列”被定义为 { ai ,ai1 ,⋯,aj }&#xff0c;其中 1≤i≤j≤n。“连续子序列最大和”则被定义为所有连续子序列元素的和中最大…

Vrrp配置和原理

Vrrp配置和原理 文章目录Vrrp配置和原理概述物理与逻辑拓扑重点vrid虚拟路由器虚拟IP地址及虚拟MAC地址超时时间计算-MASTER_DOWNvip 管理员手动指定方法Master路由器Backup路由器PriorityVRRP报文格式VRRP状态机从Backup到masterVRRP协议状态二.优先级一样比较接口IPVRRP优先级…

可编辑59页PPT | 某大型集团人工智能数字化转型SAP解决方案

荐言摘要&#xff1a;某大型集团人工智能数字化转型中&#xff0c;SAP解决方案扮演着智能中枢角色&#xff0c;深度融合AI技术与核心业务场景&#xff0c;破解传统系统“数据孤岛流程僵化”双重困局。针对集团跨产业、多业态特点&#xff0c;方案以SAP S/4HANA为数据底座&#…

【RK3568 驱动开发:实现一个最基础的网络设备】

RK3568 驱动开发&#xff1a;实现一个最基础的网络设备一、引言二、编写网络设备驱动代码1. 核心数据结构与接口2. 核心功能实现3. 网络命名空间管理4.源代码三、编译与验证1.加载模块2.验证网络四、注意事项一、引言 RK3568 作为一款高性能 ARM 架构处理器&#xff0c;广泛应…

CAIDCP系列对话:AI 驱动安全

数字时代&#xff0c;AI浪潮翻涌&#xff0c;网络安全攻防战已悄然升级&#xff1a; 某工业控制系统遭AI驱动勒索攻击&#xff1a;攻击者借 AI 精准捕捉异常网络扫描、远程 PowerShell 痕迹&#xff0c;瞬间加密文件索要赎金&#xff1b; 另一边&#xff0c;某大型科技公司用AI…

ARMv8 没开mmu执行memset引起的非对齐访问异常

最近在haps上验证一个新的芯片&#xff0c;记录一下memset访问出错的问题。在没开mmu和cache的情况下&#xff0c;对全局变量指针进行memset清零操作&#xff0c;发现每次都会出现异常。最后发现是没开mmu导致出现了数据非对齐访问导致报错。排查EC区域发现是0x25&#xff0c;产…

基于LiveKit Go 实现腾讯云实时音视频功能

详细的生产部署建议&#xff0c;适用于 LiveKit Go 服务器 Web 客户端 TURN/HTTPS。 1. 服务器准备 推荐使用云服务器&#xff08;如阿里云、腾讯云、AWS、Azure等&#xff09;&#xff0c;公网IP&#xff0c;带宽建议≥10Mbps。系统推荐 Ubuntu 20.04/22.04 或 CentOS 7/8&…

三位一体:Ovis-U1如何以30亿参数重构多模态AI格局?

1. 时代命题&#xff1a;多模态统一模型的破局之战当GPT-4o以万亿级参数构建多模态帝国时&#xff0c;中国AI军团正在书写另一种答案。Ovis-U1用30亿参数证明&#xff1a;参数量并非决定性因素&#xff0c;架构创新与训练策略的化学反应&#xff0c;同样能催生出改变游戏规则的…

图像处理基础:镜像、缩放与矫正

在图像处理中&#xff0c;镜像、缩放和矫正操作是常见的图像变换手段。这些操作可以帮助我们对图像进行调整&#xff0c;以满足不同的需求。本文将详细介绍这三种操作的原理和实现方法&#xff0c;并通过代码示例展示它们的实际应用。一、图片镜像旋转1.1 什么是镜像旋转&#…

「Java案例」猜数游戏

案例实现 猜数字游戏 设计一个三位数的猜数游戏,三位数随机生成。程序提示用户输入一个三位的数字,依照以下的规则决定赢取多少奖金:1) 如果用户输入的数字和随机数字完全一致,输出:“恭喜恭喜!完全猜对了!获得三个赞!”2) 如果用户输入的数字覆盖了随机生成的所有数…

创客匠人解析创始人 IP 内卷:知识变现时代的生存逻辑与破局路径

当知识付费行业进入 “存量竞争” 阶段&#xff0c;创始人 IP 的 “内卷” 已非选择而是必然。创客匠人在服务数万知识创业者的实践中发现&#xff0c;那些实现逆势增长的案例&#xff0c;其核心差异往往在于创始人是否具备 “从幕后走到台前” 的决心与能力 —— 这种内卷并非…