当前位置: 首页 > news >正文

Qt中widget控件的常见属性

控件---Widget

内置控件包括按钮,文本框,单选按钮,复选按钮,下拉框等都是控件

Qt Designer中显示了内置控件:

最早的GUI开发,是没有控件概念,界面上显示的对象全部是通过API“画”出来的

随着时代的发展,,才出现越来越多的控件

QtDesigner中展示的控件都是默认的样子,可以通过优化手段进行优化,还提供了Qt Designer Studio制作界面

Qt中的各种控件都是继承自QWidget类----Qt控件体系中通用的部分

可以在Qt Designer中查看其属性

核心属性了解

enable

enabled:描述一个控件是否处于可用状态,true表示可用,false表示禁用

所谓禁用指的是该控件不能接收任何用户的输入事件,并且外观上往往是灰色

如果一个widget被禁用,则该widget的子元素也被禁用

相关APT接口

isEnabled()     获取控件的可用状态

setEnabled     设置控件是否可用,true表示可用,false表示禁用

示例:

未关联槽函数时,点击按钮无反应

关联槽函数后,点击按钮也无反应

此处是在创建按钮时进行禁用,也可以通过其它按钮来设置这个按钮的可用状态

通过pushButton_2来控制pushButton可用状态

转到槽函数

实现一个按钮控制另一个按钮的可用状态

geometry

geometry----几何,视为四个属性的统称:x,y,width,height

当前控件的位置和尺寸

相关接口:

geometry()      

获取控件的位置和尺寸,返回结果为QRect,包含x,y,width,heigth,其中x,y是控件左上角的坐标

setGeometry(QRect)或setGeometry(int x,int y,int width, int height)

设置控件的位置和尺寸,可用直接设置一个QRect,也可以分为四个属性单独设置

如:

先在ui界面创建按钮

再创建一组按钮,模仿方向键,将其objectname修改为其方向

实现通过点击这4个方向按钮移动button

设置up的槽函数键控制pushbutton向上移动

可用看到pushbutton当前的x,y坐标,和控件大小

在通过setY(rect.y()+5)来改变其y坐标,使rect中y向上移动

最后将rect设置进pushbutton

但是此时发现点击按钮只能实现按钮的高度和长宽的改变,而不能实现按键的整体移动

因为代码中只对pushbutton左上角位置的x,y进行修改,左上角改变的同时修改了pushbutton的高度和宽度

实现平移---保证pushbutton尺寸不变

通过geometry的第二个函数

setGeometry(int x,int y,int width, int height)

传参时不改变weidth和height,只改变x,y

如up向上平移,只将原来的rect.y()-5向上移动,其余不变

从而实现pushlbutton控件的平移

通过移动控件,实现一个“不会被点击到”的按钮

在ui界面设置一个label和两个button控件

转到“是的”控件的槽函数,设置点击后将labe“你的选择”修改为选择正确

设置“不是”控件的槽函数,通过修改geomety实现点击按钮,按钮移动,从而实现一个”无法被点击到的按钮“

先实现获得随机种子

通过随机种子生成随机数得到x,y,进行控件移动

从而实现一个”无法被点击到“的按钮

但实际上是已近点击后按钮才进行移动,实际还是进行了点击,可用通过修改移动控件槽函数的触发信号,只要鼠标移动到控件上就进行移动,实现真正的无法点击的控件

需要使用到Qt中的事件机制

window frame

window frame是窗口框架

也就是ui界面的四边

是操作系统自带的,可用通过api去掉

那控件的x,y坐标是以拿个点作为原点,是window frame的左上角还是,ui界面的左上角?

不同的api的原点不同,既可能是window frame的左上角,也可能是ui界面的左上角

其中geometry()和setgeometry()都不考虑window frame

如果用frameGeometry(),pos()就考虑window frame

实例:

打印widget控件的geometry属性和frameGeometry属性

发现结果是一样的

因为当前是在构造函数中进行qDbug输出,而widget对象在构造函数中被构造,qDebug时,还未构造好,还没有被加入到window frame中,因此还不能看到geometry属性和frameGeometry属性的区别

通过添加一个按钮,在构造widget完成后,点击按钮,通过按钮连接的槽函数打印widget的geometry属性和frameGeometry属性

此时就能看到geometry属性和frameGeometry属性的区别

windowTitle

windowTitle  窗口标题

当前windowTiele属性属于QWidget,只能针对顶层窗口控件---widget才有效

相关接口:

setWindowTitle()     

设置窗口标题

例:

windowTitle()

获取窗口标题

例:

windowIcon

windowIcon 窗口图标----与windowTitle一致,只能针对顶层窗口使用

相关接口:

windowIcon()  获取控件的窗口图标,返回QIcon对象

setWindowIcon(const QIcon& icon)   设置控件的窗口图标

使用方法:

先准备一张图片,保存,并获取图片路径,设置进QIcon,将QIcon设置进widget

但是此时是通过绝对路径加载图片,若图片位置发送变化,就无法替换成功。

通过相对路径进行替换,将程序和图片包装起来,但是图片若被删除或修改还是可能导致替换失败

Qt还提供qrc机制

从根本上解决图片路径在用户机器上不存在和图片被删除的问题

qrc机制

给Qt项目引入一个额外的xml文件(后缀名为.qrc)

在这个xml文件中把要使用的图片资源导入,并在xml中进行记录,qt在编辑项目时,更具qrc中描述的图片信息,找到图片内容,提取图片的二进制数据,将二进制数据转换成c++代码,最终编译到可执行程序exe中,只要能执行程序,就能将图片替换成功

缺点:qrc无法导入太大的资源文件

例:

在新建文件中选择qt,resource file

得到一个文件,显示资源文件可视化界面

先创建一个前缀---虚拟的目录

这个目录不是真实存在的,而是Qt自己抽象出来的

qrc机制本质就是把图片的二进制数据转换成c++代码(在代码中看到很大的char数组----图片的二进制数据)

为了便于qt进行访问,所以抽象出虚拟目录

将/new/prefix1改为/

导入图片到资源文件中

导入图片时,要确保图片必须在resource.qrc文件的同级目录,或resource.qrc文件同级目录下的子目录中

将图片拷贝到当前目录中

选中图片后

点击复制,找到存放qrc文件的目录

选择保存,就能导入成功

以:的方式直接访问文件\\表示\,也可用:/QQ20250414-164106.jpg

windowOpacity

windowOpacity 窗口不透明度

相关接口:

windowOpacity()

获取到控件的不透明数值,返回float,取值为0.0->1.0,其中0.0表示全透明,1.0表示完全不透明

setWindowOpacity(float n)

设置窗口透明度

例:

在ui界面设置2个按钮,通过这两个按钮,实现一个增加窗口不透明度,一个减少窗口的不透明度

定义增加/减少透明度的槽函数

实现修改窗口不透明度

但是窗口的不透明度变化不是精确的

此处涉及到浮点数float类型在内存中的存储

IEEE 754标准规定了浮点数要使用二进制科学计数法的方式来表示

把一个浮点数分成三个部分

  1. 符号位
  2. 有效数字----二进制表示,都是小于0的小数部分,第一个为0.5,第二个为0.25,第三个为0.125等

     3.指数部分

由于这种表示方式,难以精确表示一个小数,因为float和double的有效数字部分长度都是有效的所以难以表示一个精确的小数

若不透明度的值超过1.0或低于0.0,就无法进行增加或减少,就算进行增加或减少也无法设置进去

cursor

cursor 鼠标光标样式

相关接口:

cursor()  获取当前widget的cursor属性,返回QCursor对象,当鼠标悬停的该widget上时,就会显示出对应的形状

setCursor(const QCursor& cursor)

设置该widget光标的形状,仅在鼠标停留在该widget上时生效

QGuiAppliaction::setOverrideCursor(const & QCursor& cursor)

设置全局光标的形状,对整个程序中的所有widget都生效,覆盖上面通过setCursor设置的内容

例:

设置一个按钮,定义他的槽函数

从而实现点击按钮后,在按钮区域光标图样改变

实现通过图片自定义光标

先准备一张图片,将图片导入.qrc文件---qrc机制,通过图片构造光标对象,将光标对象设置进控件

从而实现自定义光标

也可以对自定义光标的图片进行缩放,不是修改图片本身,而是拷贝一份后进行修改,返回修改后的对象

font

font  字体属性

相关接口

font()   

获取当前widget的字体信息,返回QFont对象

setFont(const QFont& font)

设置当前widget的字体信息

QFont相关属性

可用在Qt Designer ui界面进行实时修改

例:

创建一个按钮,实现点击按钮修改文本属性

定义按钮的槽函数,通过按钮修改按钮的font属性

toolTip

toolTip   控件提示

相关接口

toolTip()

获取toolTip提示内容

setToolTip()

设置toolTip提示内容,鼠标悬停在该widget上时会有提示说明

setToolTipDuration()

设置toolTip提示的时间,单位为ms,时间到后toolTip自动消失,单位时毫秒

例:

创建两个按钮,点击其中一个后设置另一个按钮的toolTip提示内容

focusPolicy

focusPolicy  设置控件获取到焦点的策略

所谓“焦点”,对于键盘操作非常明显

如:

这样一个输入框,如果未选中,键盘的输入不会输入到输入框

只有在选中之后,键盘的输入才会输入到输入框

GUI中控件的焦点时非常关键的,哪个控件获得了焦点,就是对哪个控件进行操作

相关接口

focurPolicy()

获取该widget的focusPolicy,返回Qt::FoucsPolicy

setFocusPolicy(Qt::FocusPolicy policy)

设置widget的focusPolicy

Qt::FocusPolicy是一个枚举类型,取值如下

Qt::NoFocus:控件不会接收键盘焦点

Qt::TabFocus:控件可用通过Tab键接收焦点

Qt::ClickFocus:控件在鼠标点击时接收焦点

Qt::StrongFocus:控件可用通过Tab键和鼠标点击接收焦点(默认值)

Qt::WheelFocus:类似于Qt::StrongFocus,同时控件也通过鼠标滚轮获取到焦点

例:

创建四个line edit行文本编辑框,实现不同的焦点策略

运行后,可以通过鼠标点击或table键来切换焦点---默认焦点策略

在构造函数分别设置焦点策略

实现不同的焦点策略

styleSheet

styleSheet  通过css设置widget的样式

CSS本身是属于网页前端技术,主要是用来描述界面的样式

Qt虽然是GUI开发,但实际上和网页前端有很多相同之处,因此Qt也引入对于CSS的支持

例:

在ui界面创建一个label,查看其属性找到styleSheet

设置label中文字的样式

文字家族(字体)为:微软雅黑

文字大小为:40像素

文字风格为:斜体

文字颜色为:绿色

能够在允许前进行实时显示

   

实现通过按钮的槽函数修改文字样式,使文字有夜间模式和日间模式

创建一个plain text edit 用于存放文字,两个按钮实现文字模式切换

转到两个按钮的槽函数clicked()

初始:

输入一串1

日间模式:

夜间模式:

widget初始情况下的背景颜色并不是纯白色,而是淡灰色

色号为#F0F0F0

黑色为#000000

白色为#FFFFFF

计算机中的颜色---rgb

red green blue  红绿蓝

第一种表达方式为十进制

rgb(255,0,255)     ----3个数字分别表示红蓝绿颜色所占比例,255为一个最大值16*15+15=255

第二种表达方式为16进制   

#FF00FF          ----每个颜色占两位

相关文章:

  • FPGA-DDS技术的波形发生器
  • 12【模块学习】DS18B20(二):高级使用
  • Nature图形复现—Origin绘制顶刊水准的多组柱状图
  • MySQL数据库精研之旅第六期:玩转数据库约束
  • web自动化:6种窗口截图方法、文件打开形式、文件路径及时间戳命名
  • 面试题:Eureka和Nocas的区别
  • 【未解决】Spring AI 1.0.0-M6 使用 Tool Calling 报错,请求破解之法
  • 关于汽车辅助驾驶不同等级、技术对比、传感器差异及未来发展方向的详细分析
  • Java Spring Cloud框架使用及常见问题
  • 超融合监控 | SmartX监控解析
  • 中间件--ClickHouse-5--架构设计(分布式架构,列式压缩存储、并行计算)
  • FP3:机器人操作的3D基础策略
  • 常见的 API 设计风格
  • 列表、字符串、heapq堆对列算法
  • windows10 wsl2 安装ubuntu和docker
  • 中间件--ClickHouse-6--SQL基础(类似Mysql,存在差异)
  • 【Linux】系统入门
  • cursor AI编辑器的详细使用
  • 深度解析 Vue 项目 Webpack 分包与合包 一文读懂
  • Hadoop数据压缩教程
  • A股三大股指集体高开大涨超1%,券商、房地产涨幅居前
  • 吴清:全力支持中央汇金公司发挥好类“平准基金”作用
  • 多个“网约摩托车”平台上线,工人日报:安全与监管不能掉队
  • 《中国医药指南》就“宫颈癌等论文出现男性病例”致歉:辞退涉事编辑
  • 韩国总统选举民调:共同民主党前党首李在明支持率超46%
  • 人民日报今日谈:坚决克服麻痹思想,狠抓工作落实