知者何南 发表于 2025-4-17 20:13:57

Qt中widget控件的常见属性

控件---Widget
内置控件包罗按钮,文本框,单选按钮,复选按钮,下拉框等都是控件
Qt Designer中表现了内置控件:
https://i-blog.csdnimg.cn/direct/14431729416f4dd1a159e93fdaf66906.png
最早的GUI开发,是没有控件概念,界面上表现的对象全部是通过API“画”出来的
随着时代的发展,,才出现越来越多的控件

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

Qt中的各种控件都是继续自QWidget类----Qt控件体系中通用的部分
可以在Qt Designer中查看其属性
https://i-blog.csdnimg.cn/direct/04c292d616d94c3d9ac4a5d1ad04efc2.png


焦点属性相识


enable

enabled:形貌一个控件是否处于可用状态,true表示可用,false表示禁用
所谓禁用指的是该控件不能吸收任何用户的输入事件,并且表面上往往是灰色
如果一个widget被禁用,则该widget的子元素也被禁用

相关APT接口
isEnabled()     获取控件的可用状态
setEnabled     设置控件是否可用,true表示可用,false表示禁用
示例:
https://i-blog.csdnimg.cn/direct/71fb4a7b361b4854acc8055c8a438c38.png
未关联槽函数时,点击按钮无反应
https://i-blog.csdnimg.cn/direct/3bdcaba7732c42d38c50d7abf200ff1b.png
关联槽函数后,点击按钮也无反应

此处是在创建按钮时进行禁用,也可以通过其它按钮来设置这个按钮的可用状态
通过pushButton_2来控制pushButton可用状态
https://i-blog.csdnimg.cn/direct/4503c6a4acfc4bd9b246aa546c9f9db4.png
转到槽函数
https://i-blog.csdnimg.cn/direct/5815b576d0fe4b529070c227ff8bacd3.png
实现一个按钮控制另一个按钮的可用状态


geometry

geometry----几何,视为四个属性的统称:x,y,width,height
当前控件的位置和尺寸
https://i-blog.csdnimg.cn/direct/abc2fdca0c4e4c6395b71877c78ac7db.png
相关接口:
geometry()      
获取控件的位置和尺寸,返回结果为QRect,包含x,y,width,heigth,其中x,y是控件左上角的坐标

setGeometry(QRect)或setGeometry(int x,int y,int width, int height)
设置控件的位置和尺寸,可用直接设置一个QRect,也可以分为四个属性单独设置
如:
先在ui界面创建按钮
https://i-blog.csdnimg.cn/direct/d3c52a30874a495bb872c362b479ad41.png
再创建一组按钮,模仿方向键,将其objectname修改为其方向
https://i-blog.csdnimg.cn/direct/389881ec642a4cf7ab435fdb445b16c6.png
实现通过点击这4个方向按钮移动button

设置up的槽函数键控制pushbutton向上移动
https://i-blog.csdnimg.cn/direct/0c0a578065ca40ddbb751165563106b3.png
https://i-blog.csdnimg.cn/direct/675829c1a2b6461e861f6d18b06d3eb0.png
https://i-blog.csdnimg.cn/direct/3237257f93b74b069ef29432298838b8.png
可用看到pushbutton当前的x,y坐标,和控件巨细

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

最后将rect设置进pushbutton

https://i-blog.csdnimg.cn/direct/1b77aeb2d2574927aef5d2706c6068e3.png
但是此时发现点击按钮只能实现按钮的高度和长宽的改变,而不能实现按键的整体移动
https://i-blog.csdnimg.cn/direct/3b20eabca892455db05b259de6cb713e.png
由于代码中只对pushbutton左上角位置的x,y进行修改,左上角改变的同时修改了pushbutton的高度和宽度

实现平移---保证pushbutton尺寸不变
通过geometry的第二个函数
setGeometry(int x,int y,int width, int height)
传参时不改变weidth和height,只改变x,y

如up向上平移,只将原来的rect.y()-5向上移动,别的不变
https://i-blog.csdnimg.cn/direct/34fc2c2faec146a181d18ad26201813e.png

https://i-blog.csdnimg.cn/direct/598278f6010a4a359da6ce4ce1d07649.png
从而实现pushlbutton控件的平移



通过移动控件,实现一个“不会被点击到”的按钮
在ui界面设置一个label和两个button控件
https://i-blog.csdnimg.cn/direct/b897c282e61c48758124d5312d23919a.png
转到“是的”控件的槽函数,设置点击后将labe“你的选择”修改为选择正确
https://i-blog.csdnimg.cn/direct/ef28e98a39e6425ea6d0ea767f861158.png
设置“不是”控件的槽函数,通过修改geomety实现点击按钮,按钮移动,从而实现一个”无法被点击到的按钮“
先实现获得随机种子
https://i-blog.csdnimg.cn/direct/4162288e2803456291b2994ba13ee958.png
通过随机种子天生随机数得到x,y,进行控件移动
https://i-blog.csdnimg.cn/direct/58939b907fe046d1bc809795e8fa7d55.png
从而实现一个”无法被点击到“的按钮
但现实上是已近点击后按钮才进行移动,现实照旧进行了点击,可用通过修改移动控件槽函数的触发信号,只要鼠标移动到控件上就进行移动,实现真正的无法点击的控件
需要使用到Qt中的事件机制


window frame

window frame是窗口框架
https://i-blog.csdnimg.cn/direct/04a4848de7b5413a9d8fa3d912604828.png
也就是ui界面的四边
是操纵体系自带的,可用通过api去掉
那控件的x,y坐标是以拿个点作为原点,是window frame的左上角照旧,ui界面的左上角?
不同的api的原点不同,既大概是window frame的左上角,也大概是ui界面的左上角

其中geometry()和setgeometry()都不考虑window frame
如果用frameGeometry(),pos()就考虑window frame


实例:
打印widget控件的geometry属性和frameGeometry属性
https://i-blog.csdnimg.cn/direct/7e4b534b340b40eeabdf336abb6cf635.png
发现结果是一样的
由于当前是在构造函数中进行qDbug输出,而widget对象在构造函数中被构造,qDebug时,还未构造好,还没有被参加到window frame中,因此还不能看到geometry属性和frameGeometry属性的区别

通过添加一个按钮,在构造widget完成后,点击按钮,通过按钮连接的槽函数打印widget的geometry属性和frameGeometry属性
https://i-blog.csdnimg.cn/direct/a2d371c3e044405da21b5f04a8c0d193.png
此时就能看到geometry属性和frameGeometry属性的区别


windowTitle

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

相关接口:
setWindowTitle()     
设置窗口标题
例:
https://i-blog.csdnimg.cn/direct/a613e60304c74153a77d8909df9c0307.png

windowTitle()
获取窗口标题
例:
https://i-blog.csdnimg.cn/direct/c590bc4c6c6d412ba50aed06165013c4.png

windowIcon

windowIcon 窗口图标----与windowTitle同等,只能针对顶层窗口使用
https://i-blog.csdnimg.cn/direct/e40de524ee6441e9884501c2d2a22699.png
相关接口:
windowIcon()  获取控件的窗口图标,返回QIcon对象
setWindowIcon(const QIcon& icon)   设置控件的窗口图标

使用方法:
先预备一张图片,保存,并获取图片路径,设置进QIcon,将QIcon设置进widget
https://i-blog.csdnimg.cn/direct/35bc4481725a46a18f1422b5b9b8a4a7.png
但是此时是通过绝对路径加载图片,若图片位置发送变革,就无法替换乐成。
通过相对路径进行替换,将程序和图片包装起来,但是图片若被删除或修改照旧大概导致替换失败

Qt还提供qrc机制
从根本上解决图片路径在用户机器上不存在和图片被删除的题目

qrc机制

给Qt项目引入一个额外的xml文件(后缀名为.qrc)
在这个xml文件中把要使用的图片资源导入,并在xml中进行记录,qt在编辑项目时,更具qrc中形貌的图片信息,找到图片内容,提取图片的二进制数据,将二进制数据转换成c++代码,最终编译到可执行程序exe中,只要能执行程序,就能将图片替换乐成

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

例:
在新建文件中选择qt,resource file
https://i-blog.csdnimg.cn/direct/42a058390cc342669d2ba96afb7241f6.png
得到一个文件,表现资源文件可视化界面
https://i-blog.csdnimg.cn/direct/f47f22cae02e4cef9455429dd7e41130.png
先创建一个前缀---捏造的目次
这个目次不是真实存在的,而是Qt自己抽象出来的
qrc机制本质就是把图片的二进制数据转换成c++代码(在代码中看到很大的char数组----图片的二进制数据)
为了便于qt进行访问,以是抽象出捏造目次
https://i-blog.csdnimg.cn/direct/e9b83060e1174590a353139f48da2edd.png
将/new/prefix1改为/
https://i-blog.csdnimg.cn/direct/4d752e065f764e4a81a4637b9fb4865b.png
导入图片到资源文件中
https://i-blog.csdnimg.cn/direct/af670a9d6e064ea684cc85aa0feb9f13.png
导入图片时,要确保图片必须在resource.qrc文件的同级目次,或resource.qrc文件同级目次下的子目次中
将图片拷贝到当前目次中
选中图片后
https://i-blog.csdnimg.cn/direct/ffcd71e5ad1143baaa80dc6f8911aa38.png
点击复制,找到存放qrc文件的目次
https://i-blog.csdnimg.cn/direct/da570fd7ff4a40a6b81d2e15c086d796.png
选择保存,就能导入乐成
https://i-blog.csdnimg.cn/direct/e9f681a185854de9bcb5459bad20eec9.png


以:的方式直接访问文件\\表示\,也可用:/QQ20250414-164106.jpg
https://i-blog.csdnimg.cn/direct/565eb8e4d84b47a08fe93b0a251b8714.pnghttps://i-blog.csdnimg.cn/direct/f8624d80c8fd494c8454b2be7dc408c8.png


windowOpacity

windowOpacity 窗口不透明度
相关接口:
windowOpacity()
获取到控件的不透明数值,返回float,取值为0.0->1.0,其中0.0表示全透明,1.0表示完全不透明
setWindowOpacity(float n)
设置窗口透明度

例:
在ui界面设置2个按钮,通过这两个按钮,实现一个增长窗口不透明度,一个淘汰窗口的不透明度
https://i-blog.csdnimg.cn/direct/68314abd1bf9492e8ba8af71a84d48cf.png
界说增长/淘汰透明度的槽函数
https://i-blog.csdnimg.cn/direct/e6a7aab6e5554080a471ef5e4343b1f6.png
https://i-blog.csdnimg.cn/direct/071d86b6b1284e20b457559fd6bd5721.png
实现修改窗口不透明度
https://i-blog.csdnimg.cn/direct/42a1e626010943d08878cdc91d40ae03.png
但是窗口的不透明度变革不是准确的
https://i-blog.csdnimg.cn/direct/d0174d23d5cb46b7b2327c554fcdbf96.png
此处涉及到浮点数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设置的内容

例:
设置一个按钮,界说他的槽函数
https://i-blog.csdnimg.cn/direct/6a546d5853a44bdb9bd7a94c9ccf422a.png
https://i-blog.csdnimg.cn/direct/68a7a3702fe94e2f89defbae7e229ac5.png
从而实现点击按钮后,在按钮区域光标图样改变



实现通过图片自界说光标
先预备一张图片,将图片导入.qrc文件---qrc机制,通过图片构造光标对象,将光标对象设置进控件
https://i-blog.csdnimg.cn/direct/5aaf0638d62644a19313c160ee01a579.png
https://i-blog.csdnimg.cn/direct/66cb20a7126f44f09611932a712cc337.png
从而实现自界说光标

也可以对自界说光标的图片进行缩放,不是修改图片自己,而是拷贝一份后进行修改,返回修改后的对象
https://i-blog.csdnimg.cn/direct/390e97bf77e94075b8524d62ec6d46e9.png


font

font  字体属性

相关接口
font()   
获取当前widget的字体信息,返回QFont对象

setFont(const QFont& font)
设置当前widget的字体信息

QFont相关属性
https://i-blog.csdnimg.cn/direct/747878b2248a4c5482db9c70ee59f027.png

可用在Qt Designer ui界面进行实时修改
https://i-blog.csdnimg.cn/direct/a0036524b4234080897e4143cb85878a.png

例:
创建一个按钮,实现点击按钮修改文本属性
https://i-blog.csdnimg.cn/direct/7bca1de488cc41e1b3129c712deeb08d.png
界说按钮的槽函数,通过按钮修改按钮的font属性
https://i-blog.csdnimg.cn/direct/dd57ee92af67466c9c33875e082b1605.png
https://i-blog.csdnimg.cn/direct/cda8481e293c4c53a1b3bfa1f46df7ff.png
https://i-blog.csdnimg.cn/direct/2af7b823597b4a9c90b1928dcbf469f9.png



toolTip

toolTip   控件提示
相关接口

toolTip()
获取toolTip提示内容

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

setToolTipDuration()
设置toolTip提示的时间,单元为ms,时间到后toolTip主动消散,单元时毫秒

例:
创建两个按钮,点击其中一个后设置另一个按钮的toolTip提示内容
https://i-blog.csdnimg.cn/direct/5340aa76f8284ec6b60941def402638a.png
https://i-blog.csdnimg.cn/direct/ea7a2c88081f422b81f4b4bd9af95b4d.png



focusPolicy

focusPolicy  设置控件获取到焦点的策略
所谓“焦点”,对于键盘操纵非常显着
如:
https://i-blog.csdnimg.cn/direct/d629402c986d47eda9658f5a5351b755.png
这样一个输入框,如果未选中,键盘的输入不会输入到输入框
只有在选中之后,键盘的输入才会输入到输入框

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行文本编辑框,实现不同的焦点策略
https://i-blog.csdnimg.cn/direct/f83084fa1fb3431ba04614bcef1587fc.png
运行后,可以通过鼠标点击或table键来切换焦点---默认焦点策略

在构造函数分别设置焦点策略
https://i-blog.csdnimg.cn/direct/9fa3eaafe4054d2caca24a55e5508832.png
实现不同的焦点策略


styleSheet

styleSheet  通过css设置widget的样式

CSS自己是属于网页前端技术,主要是用来形貌界面的样式
Qt固然是GUI开发,但现实上和网页前端有很多雷同之处,因此Qt也引入对于CSS的支持

例:
在ui界面创建一个label,查看其属性找到styleSheet
https://i-blog.csdnimg.cn/direct/66bf513cd3ef4bb1bb4507554805a5bd.png


设置label中文字的样式
文字家族(字体)为:微软雅黑
文字巨细为:40像素
文字风格为:斜体
文字颜色为:绿色
https://i-blog.csdnimg.cn/direct/5b11898453ed411b83c9288b31e61429.png
能够在允许前进行实时表现
https://i-blog.csdnimg.cn/direct/b0557241e9774b539433ffe513839694.png
https://i-blog.csdnimg.cn/direct/69a97f9c88ea45cabd85c1de60a154d1.png
   


实现通过按钮的槽函数修改文字样式,使文字有夜间模式和日间模式
创建一个plain text edit 用于存放文字,两个按钮实现文字模式切换
https://i-blog.csdnimg.cn/direct/5bd6c1a8a294427e817972a4f1f3bd7c.png
转到两个按钮的槽函数clicked()
https://i-blog.csdnimg.cn/direct/f26d23408af04e16a30d042330f9fd31.png

初始:
https://i-blog.csdnimg.cn/direct/981b56e5e91a4d2ab99ce02622737927.png
输入一串1
日间模式:
https://i-blog.csdnimg.cn/direct/6fc5d5cd69234ac2973d5b0df651b628.png
夜间模式:
https://i-blog.csdnimg.cn/direct/377d436cc22a424e814ba1735d82a58a.png


widget初始情况下的背景颜色并不是纯白色,而是淡灰色
色号为#F0F0F0
玄色为#000000
白色为#FFFFFF

计算机中的颜色---rgb
red green blue  红绿蓝
第一种表达方式为十进制
rgb(255,0,255)     ----3个数字分别表示红蓝绿颜色所占比例,255为一个最大值16*15+15=255
第二种表达方式为16进制   
#FF00FF          ----每个颜色占两位


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Qt中widget控件的常见属性