文章目录
- 1. windowOpacity 介绍
- 2. 使用实例
- 3. 题外话 - 双重检查(doubleCheck)
- 代码资源
1. windowOpacity 介绍
我们可以查阅qt的官方文档,进行总结:
windowOpacity()
表示窗口的不透明度级别。有效的范围是从1.0(完全不透明)到0.0(完全透明)。默认情况下,该属性的值为1.0
windowOpacity
包含两接口函数:
API | 说明 |
---|---|
windowOpacity() | 获取控件的不透明度,并返回float类型 |
setWindowOpacity() | 设置控件的不透明数值 |
2. 使用实例
我们利用上述的两个接口,实现调整窗口不透明度的操作:
- 首先创建两个按钮:
- 通过 转到槽 各自写出相应的槽函数:
void Widget::on_pushButton_add_clicked()
{
// 获取窗口不透明度数值
float opacity = this->windowOpacity();
// 如果不透明度,已经到峰值,则不继续增加
if(opacity >= 1.0) return;
// 打印并增加不透明度
qDebug() << opacity;
opacity += 0.1;
this->setWindowOpacity(opacity);
}
void Widget::on_pushButton_sub_clicked()
{
float opacity = this->windowOpacity();
if(opacity <= 0.0) return;
qDebug() << opacity;
opacity -= 0.1;
this->setWindowOpacity(opacity);
}
效果演示:
3. 题外话 - 双重检查(doubleCheck)
在上面的例子中,我们在槽函数的实现时,首先进行了opacity范围的判定:
- 实际上,
setWIndowOpacity()
函数内部本身就进行了数值的判定,即使不加范围判断,代码也成立。
Question
为什么不加范围判断,代码也成立,但还是加上判定?
Answer
- 这是一种防御性编程:
- 对于大的项目,往往会被拆分成多个模块,由不同的组 / 个人负责完成;模块间存在交互,即模块A会提供API(函数、类等)给模块B使用。
- 如果对某个变量其数值应保持在一定的范围内,如果函数内部实现没有进行范围判断、而调用者也没有进行外部判断,就会出错。
- 代码中函数内部进行判断、而外部调用也判断的方案即双重判定,可以降低代码出错率。
代码资源
上面涉及到的代码等文件资源点这里👇
QWidget的windowOpacity属性