Qt中widget控件的常见属性

打印 上一主题 下一主题

主题 1939|帖子 1939|积分 5817

控件---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标准规定了浮点数要使用二进制科学计数法的方式来表示
把一个浮点数分成三个部分

  • 符号位
  • 有效数字----二进制表示,都是小于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          ----每个颜色占两位


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表