QWidget核心属性(二)

windowOpacity

API说明
windowOpacity()获取控件的不透明数值。返回float,取值为0.0 ~ 1.0 ,其中0.0表示全透明,1.0表示完全不透明.
setWindowOpacity(float n)设置控件的不透明度

eg:
现在两个按钮控件,一个Add按钮,一个Sub按钮,当用户点击Add按钮过后可以增加窗口的透明度;当用户点击Sub按钮过后可以降低窗口的透明度;

具体实现如下:
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述

注意:
该属性与windowTitle、windowIcon属性一样只针对顶层窗口起效,对于普通控件不生效;

cursor

API说明
cursor()获取到当前控件的cursor属性,返回QCursor对象;当鼠标悬停在该控件上时,就会显示出对应的形状
setCursor(const QCursor&)设置该控件上的光标的形状,仅在鼠标停留在该控件上时生效
QGUIApplication::setOverrideCursor(const QCursor&)设置全局光标的形状,对整个程序中的控件都生效,会覆盖setCursor设置的光标

eg1:
通过图图形化界面创建一个按钮,当光标放在按钮控件上时,就会改变光标的形状,当光标退出按钮控件的区域时,就恢复原样:
在这里插入图片描述
运行结果:

在这里插入图片描述
通过代码来进行设置:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
实际上Qt内置了很多宏来定义光标的形状,我们只需要利用这些宏来构造QCursor对象,然后在调用setCursor来设置控件的形状即可,当然,我们也可以使用图片自定义光标的形状:
在这里插入图片描述
接下来,我们将把这个图设置为光标:

  1. 创建qrc文件,将图片添加进去:
    在这里插入图片描述
  2. 编写代码
    在这里插入图片描述
  3. 运行结果:
    在这里插入图片描述

font

API说明
font()获取到当前控件的字体信息,返回QFont对象
setFont(const QFont&)设置当前控件的字体信息

关于QFont的字段:

字段说明
family字体家族,eg:“楷体”、“宋体”、“微软雅黑”等
pointSize字体大小
weight字体粗细,以数值方式表示粗细程度,取值范围是[0,99],数值越大,越粗
bold是否加粗,设置为true,相当于weight为75;设置为false,相当于weight设置为50
italic是否倾斜
underline是否自带下划线
strikeOut是否带删除线

使用图形化界面创建一个文本:
在这里插入图片描述
运行结果:
在这里插入图片描述
使用图形化创建有一个好处就是,可以随时预览我们设计的结果,但是缺点也很明显就是,只能静态预览,如果我想们想要做到字体随着代码的运行而改变,那么通过代码创建就不失为一个很好的选择;
在这里插入图片描述
代码运行结果:
在这里插入图片描述

实际开发中, 字体属性如何选择, 是⼀个 “审美问题”, ⽽不是 “技术问题”. 往往需要有⼀定的艺
术细菌.
幸运的是, 公司中往往有专业的 “美⼯” / “设计” 这样的岗位, 去做这⽅⾯的⼯作. 咱们程序员只要按照⼈家给的设计稿, 把代码写出来即可. 不必过多考虑怎样搭配才好看的问题.

toolTip

API说明
setToolTip设置toolTip,鼠标悬停在控件上时又提示说明
setToolTipDuring设置toolTip的提示时间,单位ms,时间到过后,toolTip会自动消失

也有toolTip接口来获取toolTip,但是一般这个都是给用户看的,代码中一般不回获取;

eg:
在窗口上设置两个按钮控件,一i个yes按钮,一个no按钮;
当我们将光标悬停在yes按钮上时,会提示"这是一个yes按钮";
当我们将光标悬停在no按钮上时,会提示"这是一个no按钮";

在这里插入图片描述
运行结果如下:

在这里插入图片描述

上面的方式,是通过图形化的方式来创建的,接下来我们通过代码的方式来创建一手:
具体代码如下:
在这里插入图片描述

运行结果:
在这里插入图片描述

focusPolicy

设置控件获取到焦点的“策略”,比如某个控件能否用鼠标选中或者是否可以通过Tab键选中

焦点:
所谓 “焦点” , 指的就是能选中这个元素. 接下来的操作 (⽐如键盘操作), 就都是针对该焦点元素进⾏的了. 这个对于 输⼊框, 单选框, 复选框等控件⾮常有⽤的.
eg:
在这里插入图片描述
当我光标选中Bing的搜索框的时候,我就可以向搜索框中进行写入,而当我光标点击其它地方,那么这时候,无论我输入什么东西,都不会被Bing搜索框接收:
在这里插入图片描述

API说明
focusPolicy()获取当前控件的focusPolicy,返回Qt::FocusPolicy
setFocusPolicy(Qt::FocusPolicy policy)设置当前控件的focusPolicy

Qt::FocusPolicy是一个枚举类型,枚举值有:
Qt::NoFocus//表示控件不回接收键盘焦点
Qt::TabFocus//控件可以通过Tab键来接受焦点;
Qt::ClickFocus//控件可以通过鼠标点击来接收焦点;
Qt::StrongFocus//控件可以通过Tab键和ClickFocus键来接收焦点(默认值)
Qt::WheelFocus//类似于Qt::StrongFocus,同时控件也可以通过鼠标滚轮获取焦点(一般少用)

eg:
在窗口上分别创建4个文本框,然后分别演示Qt::NoFocus、Qt::TabFocus、Qt::ClickFocus、Qt::StrongFocus;

在这里插入图片描述
现在是正常情况,鼠标点击和Tab键都可以在输入框之间来回切换;
接着我们将文本框1的FocusPolicy类型,设置为NoFocus来看看:

在这里插入图片描述
通过实验,我们发现,将文本框1的FocusPolicy设置为NoFocus过后,就无法在使用鼠标或者Tab键来切换文本框1了;
接着,我们将文本框2的FocusPolicy设置为TabFocus:
在这里插入图片描述
通过实验我们发现,将文本框2的FocusPolicy类型设置为TabFocus过后,文本框2的切换只能通过Tab键来完成,鼠标点击没有反应;
接着我们来将文本框3的FocusPolicy类型设置为:ClickFocus:
在这里插入图片描述
通过实验,我们发现当把文本框3的FocusPolicy属性设置为ClickPolicy过后,切换到文本3只能通过鼠标点击,Tab键无法进行切换;
最后,我们来将文本框4的FocusPolicy类型设置为StrongPolicy:
在这里插入图片描述
通过实验结果,我们发现将文本框4的FocusPolicy属性设置为StrongPolicy过后,与没设置之前效果一样,都可以通过鼠标点击和Tab键来进行切换;

styleSheet

通过 CSS 设置 widget 的样式.

CSS (Cascading Style Sheets 层叠样式表) 本⾝属于⽹⻚前端技术. 主要就是⽤来描述界⾯的样式.
所谓 “样式”, 包括不限于 ⼤⼩, 位置, 颜⾊, 间距, 字体, 背景, 边框等.
我们平时看到的丰富多彩的⽹⻚, 就都会⽤到⼤量的 CSS.
Qt 虽然是做 GUI 开发, 但实际上和 ⽹⻚前端 有很多异曲同⼯之处. 因此 Qt 也引⼊了对于 CSS的⽀持.

CSS 中可以设置的样式属性⾮常多. 基于这些属性 Qt 只能⽀持其中⼀部分, 称为 QSS (Qt Style Sheet). 具体的⽀持情况可以参考 Qt ⽂档中 “Qt Style Sheets Reference” 章节.
eg1:
在窗口上创建一个文本,通过QSS来设置这个文本的样式:

  1. 在界面上创建一个Label
    在这里插入图片描述
  2. 打开styleSheet窗口在这里插入图片描述
  3. 接着我们会得到一个如下窗口:
    3
  4. 编辑右侧的 styleSheet 属性, 设置样式

在这里插入图片描述
5. 运行结果:
在这里插入图片描述

此处的语法格式同 CSS, 使⽤键值对的⽅式设置样式. 其中键和值之间使⽤ : 分割. 键值对之间使⽤
; 分割.
另外, Qt Designer 只能对样式的基本格式进⾏校验, 不能检测出哪些样式不被 Qt ⽀持. ⽐如 text-
align: center 这样的⽂本居中操作, 就⽆法⽀持.

eg2:
实现切换夜间模式.
设计思路:
在界面上放3个控件,一个label控件,一个白天切换按钮,一个黑夜切换按钮;
当我们点击白天就坏将整个界面切换到白天,当我么点击黑夜按钮,就会将整个界面切换到黑暗;
白天: 文字为黑色,背景为白色;
黑夜: 文字为白色,背景为黑色;
具体代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
嗯,不错的,运行结果是符合预期的,但是有一点小瑕疵就是,白天模式和原始模式是不匹配的,按理来说,原始模式应该就是白天模式,白天模式就是原始模式,但是白天模式更白,原始模式似乎偏黄一点,这是为什么?主要是因为,刚开始的时候我们还没有点击任何按钮,因此我们的夜间模式或黑夜模式都不会神效,因此界面就是初始化颜色,当我们点击黑夜或者白天按钮过后整个界面也就会发生变化!为此,我们只需要将白天模式的背景颜色调成和原始状态一样就好了:
在这里插入图片描述

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南猿北者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值