QT常用控件(1)

news2025/6/7 15:13:20

控件是构成QT的基础元素,例如Qwidget也是一个控件,提供了一个‘空’的矩形,我们可以往里面添加内容和处理用户输入,例如:按钮(QpushButton),基础显示控件(Lable),鼠标点击等。快速利用控件开发出需求的界面的重要一步就是学习QT控件的内容,接下来我们开始学习常用控件QWidget及其属性吧。

一,QWidget

QWidget是所有控件间接或者直接的父类,提供了一个空的矩形,我们可以通过对这个矩形的内容以及本身进行开发,实现我们需要的界面,说了这么多,我们先见一下QT的Qwidget界面吧。

没错,这个我们运行后每次都出现的就是Qwidget界面,其他控件都是在QWidget控件上进行开发。点击之后可以在ui界面进行查看,Qwidget的属性有很多,我们介绍和学习一些常用的属性

1,控件启用

enabled:这个代表控件是否启用,如果不启用那么控件就是灰色的,而且我们无法对其进行任何操作,接下来我们看看代码和效果,因为QWidget被禁用了,所有基于其添加的控件自然也无法使用,当然我们也可以通过右侧UI界面的属性进行勾选设置。

可能会有细心的朋友发现很多时候UI设置的属性和代码设置的属性不一样,那么哪一个优先级高呢?取决于widget.cpp里面的构造函数

我们也可以通过Isenable()和setEnable获取,改变控件是否启用的属性。

2,控件位置

在上面的控件属性图里面相信我们也看到了下面这个

这个就是坐标与大小属性,前面两个是x,y坐标(横坐标向左变大,纵坐标向下增大),800x600就是宽和高。那我们该怎么获取这个属性,修改这个属性呢?

首先介绍一下geometry函数

这个函数可以获取控件的位置坐标,以及控件大小长宽,位置坐标的Y轴是向下增长的。0点在左上角,以widget控件为参考系,单位是像素点。

那我们该如何设置控件的坐标呢?我们可以查看qt离线文档

我们可以使用QRectF接收控件坐标和设置控件坐标。QRectF和QRrct可以相互显示和隐式转换,区别在于QRect存储是整形,QRect存储的是浮点数。接下来我们简单使用一下吧

//修改位置前代码    
QPushButton* my_button=new QPushButton(this);
    my_button->setText("肖涵坤");

//使用按钮控件修改后
void Widget::MoveButton(){
//my_button被我移到widget里面变成了成员变量,方便获取
    QRect rect=this->my_button->geometry();
    //注意X,Y是起始位置,width和height是右下角位置,
    //单独调整X和Y,width和height不会改变,导致控件变小,xy超过width和height时控件直接大小清零不显示了
    //原因是单独设置X,Y时,width和height坐标不变
    //下面的效果实际上是平移,下面一行代码设置效果等同
    rect.setRect(rect.x()+100,rect.y()+100,rect.width(),rect.height());
//    rect.setX(rect.x()+100);
//    rect.setY(rect.y()+100);
//    rect.setWidth(rect.width()+100);
//    rect.setHeight(rect.height()+100);
    this->my_button->setGeometry(rect);
}

效果:每次点击按钮都会将按钮下右下角移动根号下100*100/2个像素点

二,windowIcon

1,控件作用

windowIcon是用来设置widget窗口图标的,类似于下面谷歌的图标

我们设置窗口,需要先指定一个图片路径作为窗口图标,我们这里先简单的试一下

    QIcon icon("D:\\HuaweiMoveData\\Users\\86182\\Desktop\\学校作业\\love.jpg");
    this->setWindowIcon(icon);

效果:

我们可以看到两个窗口图片都改变了,但是有一个问题,我们的图片是存储在本地的桌面,如果项目换了一个坏境或者图片丢失这个图片就无法访问会报错了,那我们该怎么办,这就是我接下来要讲的。

2,qrc机制

这个机制原理很简单,实际上就是将文件存储在QT项目的工程目录下面,qrc机制负责帮我们管理这些文件。

qrc机制qrc ⽂件是⼀种XML格式的资源配置⽂件, 它⽤XML记录硬盘上的⽂件和对应的随意指定的资源名称. 应⽤程序通过资源名称来访问这些资源。它可以讲图片等第三方资源以二进制形式写入到可执行文件里面,即使资源丢失也不会影响展示效果,达到了不依赖路径的效果。那qrc如何使用呢?

1,选择新建文件

2,设置qrc名字

3,选择需要qrc的项目

4,添加qrc文件,路径设为/,//可以理解为目录

5,选择添加文件

6,因为文件不在qrc目录及子目录下,会自动复制我们需要手动将文件复制到工程目录下

7,选择保存即可看到这个文件

8,在代码里面使用,注意之前选择的/就是目录

qrc优点:代码稳定,不会出现资源丢失的情况

缺点:如果资源太大,exe文件体积会很大,编译时因为要将大量的资源编译成二进制需要消耗大量时间。

三,windowOpacity

这个控件是设置控件的透明度的,范围是0-1,透明度由小到大。大于1的效果和1差不多,负数效果和0一样,我们可以看一下0.5透明度效果。

四,cursor

这个的意义是鼠标停留时光标的形状,我们可以通过setCusor设置鼠标停留在控件上面的形状。

下面是qt官方提供的光标形状

很抱歉,暂时无法看效果,因为光标截图的时候切走了,不够大家可以自己试试。

    QCursor cursor(Qt::WaitCursor);
    this->setCursor(cursor);

有时候我们想用本地下载的图片,如唱跳rap打篮球,我们该怎么办呢?我们可以使用下面的构造函数设置,hotX和hotY代表鼠标点击在光标的的那个位置,零点在图片的左上角

还有我们设置的图片可能需要调整大小,我们可以通过下面这个函数调整

这样子我们就实现了自定义鼠标

    QPixmap pip(":/love.jpg");
    pip=pip.scaled(20,20);
    QCursor cursor(pip,10,10);
    this->setCursor(cursor);

五,字体设置

我们可以简单的使用一下

    QFont font("微软雅黑",5,50,true);
    ui->label->setFont(font);

接下来我们介绍一下里面常用属性

Bold:是否加粗
Capitalization:文本大小写规则
Family:字体样式
pointSize:字体大小,数字越大字体越大
weight:字体的粗细,范围【0-99】
italic:是否倾斜
underline:下划线
strikeOut:删除线

六,toolTip

这个控件的作用是当鼠标悬停在控件上面的时候会有提示,效果如下图

相信这么简单的使用方法就不需要多介绍了,直接将想要提示的文本写入里面就可以了,例如我上面的文本就是设置成了这是一个Label类型

七,foucsPolicy

这个控件的作用和名字一样设置焦点的策略。首先焦点是什么呢?焦点就是能选择这个元素,就想玩电子版象棋,当你点到想要移动的棋子时,它被选中了,就是聚焦了,那焦点可以通过哪几种方法选中呢?一般是tap键,鼠标点击这两种方式。

这上面介绍了五种聚焦模式,也就是选中,上面的value是2的次方,原理类似于位图


Qt::TabFocus    按tap键可以选中
Qt::ClickFocus    通过鼠标点击
Qt::StrongFocus  可以通过所以方式选中
Qt::WheelFocus    可以通过鼠标滚动选中
Qt::NoFocus    无法选中

八,styleSheet

qt里面支持向前端界面一样,使用CSS格式设置属性,就是下面这种形式,不过qt支持的属性比较少称为QSS,大家可能通过离线文档查看每个具体控件支持的属性

上面的代码其实有问题,因为qt的setStyleSheet是进行覆盖设置的,那我们怎么进行追加呢?答案是先使用styleSheet获取原先的QSS,再进行字符串追加实现效果叠加。

注:记得加分号分割哦

九,通过UI界面实现上述效果

qt不仅仅可以通过代码实现控件属性设置,也可以通过UI界面设置,大家可以试试,会了代码设置基本上使用UI界面没有问题

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

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

相关文章

明基编程显示器终于有优惠了,程序员快来,错过等一年!

最近618的活动已经陆续开始了,好多人说这是买数码产品的好时候,作为一名资深程序员,我做了不少功课,决定给自己升级办公设备,入手明基 RD 系列的显示器,这是市面上首家专注于我们程序员痛点和需求的产品&am…

【计算机网络】非阻塞IO——select实现多路转接

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹:【计算机网络】NAT、代理服务器、内网穿透、内网打洞、局域网中交换机 🔖流水不争&#xff0…

LeetCode--23.合并k个升序链表

解题思路: 1.获取信息: 给出了多个升序链表,要求合并成一个升序链表,返回首元结点 2.分析题目: 外面在21题的时候,讲了怎样合并两个升序链表为一个升序链表,不了解的,建议去看一下21…

【推荐算法】NeuralCF:深度学习重构协同过滤的革命性突破

NeuralCF:深度学习重构协同过滤的革命性突破 一、算法背景知识:协同过滤的演进与局限1.1 协同过滤的发展历程1.2 传统矩阵分解的缺陷 二、算法理论/结构:NeuralCF架构设计2.1 基础NeuralCF结构2.2 双塔模型进阶结构2.3 模型实现流程对比 三、…

负载均衡相关基本概念

负载均衡在系统架构设计中至关重要,其核心目标是合理分配负载,提升系统整体性能和可靠性。本文简要介绍了负载均衡的基本概念,包括四层和七层负载均衡、负载均衡的使用场景和实现方式、负载均衡的常用算法以及一些配置相关知识。 1、负载均衡…

集成电路设计:从概念到实现的完整解析优雅草卓伊凡

集成电路设计:从概念到实现的完整解析优雅草卓伊凡 一、集成电路设计:芯片制造的”灵魂蓝图” 1.1 什么是集成电路设计? 集成电路(IC)设计是指通过电子设计自动化(EDA)工具,将数百…

动态规划之网格图模型(二)

文章目录 动态规划之网格图模型(二)LeetCode 931. 下降路径最小和思路Golang 代码 LeetCode 2684. 矩阵中移动的最大次数思路Golang 代码 LeetCode 2304. 网格中的最小路径代价思路Golang 代码 LeetCode 1289. 下降路径最小和 II思路Golang 代码 LeetCod…

robot_lab——rsl_rl的train.py整体逻辑

文章目录 Go2机器人训练流程详细分析概述1. 训练启动流程1.1 命令行参数解析RSL-RL相关参数组Isaac Sim应用启动参数组 1.2 RL配置1.3 Isaac Sim启动 2. 环境配置加载2.1 Hydra配置系统 3. 环境创建与初始化3.1 Gym环境创建3.2 Manager系统初始化3.2.1 ObservationManager3.2.2…

.NET 原生驾驭 AI 新基建实战系列(三):Chroma ── 轻松构建智能应用的向量数据库

在人工智能AI和机器学习ML迅猛发展的今天,数据的存储和检索需求发生了巨大变化。传统的数据库擅长处理结构化数据,但在面对高维向量数据时往往力不从心。向量数据库作为一种新兴技术,专为AI应用设计,能够高效地存储和查询高维向量…

8.RV1126-OPENCV 视频中添加LOGO

一.视频中添加 LOGO 图像大体流程 首先初始化VI,VENC模块并使能,然后创建两个线程:1.把LOGO灰度化,然后获取VI原始数据,其次把VI数据Mat化并创建一个感兴趣区域,最后把LOGO放感兴趣区域里并把数据发送给VENC。2.专门获…

API管理是什么?API自动化测试怎么搭建?

目录 一、API管理是什么 (一)API管理的定义 (二)API管理的重要性 二、API管理的主要内容 (一)API设计 1. 遵循标准规范 2. 考虑可扩展性 3. 保证接口的易用性 (二)API开发 …

GIC v3 v4 虚拟化架构

ARMV8-A架构中包含了对虚拟化的支持。为了与架构保持匹配,GICV3也对虚拟化做了支持。新增了以下特性: 对CPU interface的硬件虚拟化虚拟中断maintenance 中断:用于通知监管程序(例如hypervisor)一些特定的虚拟机事件 …

2025远离Deno和Fresh

原创作者:庄晓立(LIIGO) 原创时间:2025年6月6日 原创链接:https://blog.csdn.net/liigo/article/details/148479884 版权所有,转载请注明出处! 相识 Deno,是Nodejs原开发者Ryan Da…

Flask+LayUI开发手记(七):头像的上传及突破static目录限制

看了看,上篇开发手记是去年8月份写的,到现在差2个月整一年了。停更这么长时间,第一个原因是中间帮朋友忙一个活,那个技术架构是用springboot的,虽然前端也用layUI,但和Flask-python完全不搭界,所…

MiniExcel模板填充Excel导出

目录 1.官方文档 2. 把要导出的数据new一个匿名对象 3.导出 4.注意事项 5.模板制作 6.结果 1.官方文档 https://gitee.com/dotnetchina/MiniExcel/#%E6%A8%A1%E6%9D%BF%E5%A1%AB%E5%85%85-excel // 1. By POCO var value new {Name "Jack",CreateDate n…

MCP协议重构AI Agent生态:万能插槽如何终结工具孤岛?

前言 在人工智能技术快速发展的2025年,MCP(Model Context Protocol,模型上下文协议)正逐渐成为AI Agent生态系统的关键基础设施。这一由Anthropic主导的开放协议,旨在解决AI模型与外部工具和数据源之间的连接难题,被业界形象地称…

阿里云事件总线 EventBridge 正式商业化,构建智能化时代的企业级云上事件枢纽

作者:肯梦、稚柳 产品演进历程:在技术浪潮中的成长之路 早在 2018 年,Gartner 评估报告便将事件驱动模型(Event-Driven Model)列为十大战略技术趋势之一,指出事件驱动架构(EDA,Eve…

CentOS8.3+Kubernetes1.32.5+Docker28.2.2高可用集群二进制部署

一、准备工作 1.1 主机列表 HostnameHost IPDocker IPRolek8s31.vm.com192.168.26.3110.26.31.1/24master&worker、etcd、dockerk8s32.vm.com192.168.26.3210.26.32.1/24master&worker、etcd、dockerk8s33.vm.com192.168.26.3310.26.33.1/24master&worker、etcd、…

学习日记-day23-6.6

完成目标: 知识点: 1.IO流_转换流使用 ## 转换流_InputStreamReader1.字节流读取中文在编码一致的情况,也不要边读边看,因为如果字节读不准,读不全,输出的内容有可能会出现乱码 2.所以,我们学了字符流,字符流读取文本文档中的内容如果编码一致,就不会出…

Pytorch安装后 如何快速查看经典的网络模型.py文件(例如Alexnet,VGG)(已解决)

当你用conda 安装好虚拟环境后, 找到你的Anaconda 的安装位置。 我的在D盘下; 然后 从Anaconda3文件夹开始:一级一级的查看,一直到models Anaconda3\envs\openmmlab\Lib\site-packages\torchvision\models 在models下面&#x…