1.windowOpacity
作用:不透明度
API:
|---------------------------|-------------------------|
| windowOpacity() | 获取不透明度,0.0为全透明,1.0表示不透明 |
| setWindowOpacity(float n) | 设置不透明度 |
示例
cpp
void Widget::on_pushButton_add_clicked()//增加透明度
{
float opacity=this->windowOpacity();//不透明度应该减小
if(opacity<=0.0)
{
return ;
}
this->setWindowOpacity(opacity-0.1);
}
void Widget::on_pushButton_reduce_clicked()//减小透明度
{
float opacity=this->windowOpacity();//增加不透明度
if(opacity>=1.0)
{
return ;
}
this->setWindowOpacity(opacity+0.1);
}
问题1:不透明度的数值变化
变化规律:每一次变化都不是精确的被设置数值。
原因:浮点数在内存中的存储、浮点数精度问题(计算不准确、存储有精度损失)
IEEE754标准存储浮点数:规定使用 二进制 科学计数法方式表示
将浮点数存储时分为三部分1.符号位2.有效数字3.指数部分
有效数字大于等于1,小于2。
小数点前,第一位表示2^0,第二位表示2^1.....
小数点后,第一位表示2^-1(0.5),第二位表示2^-2(0.25).....
因此,0.1这样的小数,是无法用二进制准确表示的。
所以在浮点数计算+-0.1时,无法准确的对数值+-0.1。
这样的存储机制-》优点:运算速度快、占用空间小。缺点:有的浮点数不能精确存储
所以注意:浮点数运算结果不准确的问题、浮点数不要直接使用==来比较是否相等,而是两数做差,判定差的绝对值小于预期误差范围。
问题2:在设置前,检查边界情况,其实不检查也不会报错
这样做的目的是:防御性编程。
防御性编程(Defensive Programming)是一种编程方法,旨在通过预见和处理可能出现的错误或不稳定情况,提高软件系统的健壮性和稳定性。
双重判定double check,在接口调用之前,检查参数的合法性。在接口内部,再一次检查参数合法性。
2.cursor
作用:修改光标样式
API:
|------------------------------------------------------------|-----------------------------------------------|
| cursor | 获取当前widget的cursor属性,返回QCursor对象 |
| setCursor(const QCursor& cursor) | 设置该widget的光标样式,只在光标移动到该widget上时生效。 |
| QGuiApplication::setOverrideCursor(const QCursor& cursor) | 设置程序内的全局光标样式,覆盖所有子wiget的光标样式。注意不是设置系统级别的全局样式。 |
示例
2.1 setCursor(QCursor)
2.1.1 使用Qt内置的光标样式
1.图形化方式设置
选中控件,设置cursor属性。
2.代码方式设置
QCursor构造1:(Qt::CursorShape)
- 代码:
F2转到定义,产查看内置光标样式。
2.1.2 自定义光标样式
方法:将图片资源导入Qt项目,qrc文件中,使用该图片。
1.创建.qrc文件管理图片资源
2.添加前缀、虚拟目录
3.使用图片做光标样式
QCursor构造2:(QPixmap,X,Y)
- 代码:
效果:
参数1:QPixmap图片类型
构造函数:参数为图片资源虚拟路径
方法:scaled设置图片宽高,返回新的图形对象副本,不对原对象进行修改
示例:
参数2,3:设置光标点击位置
hotX、hotY表示鼠标点击时具体的像素点的坐标。
默认值-1,-1,表示图片左上角。
2.2 免费图标库
3.font
- 作用:字体信息
- API:
|-----------------------------|--------------------------|
| font() | 获取widget的字体信息,返回QFont对象。 |
| setFont(const QFont& font) | 设置当前widget的字体信息。 |
- QFont类型的属性:
|-----------|---------------------------------|
| family | 字体 |
| pointSize | 字体大小,单位px |
| weight | 字体粗细,[0,99] |
| bold | 是否加粗,加粗相当于weight75,不加粗weight为50 |
| italic | 是否倾斜 |
| underline | 是否有下划线 |
| strikeOut | 是否带删除线 |
示例:
1.图形化方式设置
2.代码方式设置
cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QLabel* label=new QLabel(this);
label->setText("一段文本");
//床架QFont字体对象
QFont font;
font.setFamily("仿宋");
font.setPointSize(30);
font.setBold(true);
font.setItalic(true);
font.setUnderline(true);
font.setStrikeOut(true);
//把font对象设置到label
label->setFont(font);
}
4.toolTip
- 功能:鼠标悬停时,弹出提示信息。
- API:
|------------------|---------------------------------------|
| setToolTip | 设置toolTip提示内容 |
| setToolTipDuring | 设置toolTip提示的持续时间,单位ms毫秒。 时间到达后提示自动消失。 |
示例:
cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置按钮的toolTip
//程序启动需要实现的效果,在构造函数里实现
ui->pushButton_yes->setToolTip("这是yes按钮");
ui->pushButton_yes->setToolTipDuration(3000);
ui->pushButton_no->setToolTip("这是no按钮");
ui->pushButton_no->setToolTipDuration(3000);
}
5.focusPolicy
- **功能:**控件获取焦点的方式。选中"焦点"后,接下来的操作是针对该焦点元素进行的。
- 获取焦点的常见方式:鼠标 或 tab键
- API:
|----------------------------------------|---------------------------------------------|
| focusPolicy() | 获取widget的focusPolicy,返回Qt::FocusPolicy类型对象。 |
| setFocusPolicy(Qt::FocusPolicy policy) | 设置widget的焦点获取方式 |
- 使用场景:
在线oj监控页面跳转的功能。
其中一个策略就是,oj页面中,网页始终处于获取焦点的状态。当页面切换(进入其他程序),网页会检测到失去焦点。
Qt::FocusPolicy,焦点获取方式的枚举类型
枚举类型,取值如下:
|-----------------|-------------------------|
| Qt::NoFocus | 控件不会接收焦点 |
| Qt::TabFocus | 控件可以通过tab键接收焦点 |
| Qt::ClickFocus | 控件在鼠标点击时获取焦点 |
| Qt::StrongFocus | 控件可以通过tab和鼠标点击获取焦点(常用的) |
| Qt::WheelFocus | 可以通过tab,鼠标点击、鼠标滚轮,获取焦点 |
示例:修改获取焦点方式
图形化方式,在属性列表直接选择,修改
6.styleSheet
功能:通过CSS设置widget样式
CSS层叠样式表,描述界面的样式。
Qt参考css,实现了一套QSS。
先通过styleSheet属性了解一下样式。
示例1:
cpp
font-family: '微软雅黑';
font-size: 30px;
font-style: italic;
color: green;
**样式设置的语法格式:键和值之间使用":"分隔 ,**键值对之间使用";"分隔
样式设置方法可以在Qt文档中搜索Qt Style Sheet。
示例2:夜间模式效果
cpp
void Widget::on_pushButton_light_clicked()
{
//设置背景色,文字颜色
//设置窗口的样式
this->setStyleSheet("background-color: white;");
//设置输入框的样式
ui->plainTextEdit->setStyleSheet("background-color: white; color: black");
//设置按钮样式
ui->pushButton_light->setStyleSheet("color: black");
ui->pushButton_dark->setStyleSheet("color: black");
}
void Widget::on_pushButton_dark_clicked()
{
//设置窗口的样式
this->setStyleSheet("background-color:black;");
//设置输入框的样式
ui->plainTextEdit->setStyleSheet("background-color:black; color:white");
//设置按钮样式
ui->pushButton_light->setStyleSheet("color:white");
ui->pushButton_dark->setStyleSheet("color:white");
}
窗口背景色区域:
颜色的表示方式
1.CSS/QSS可以使用颜色单词来设置颜色。(单词方便用来表示所有颜色)
2.RGB方式(Red,Green,Blue:红绿蓝光的三原色)
RGB
屏幕上的一个像素,包含一个RGB的灯泡。
计算机中,通常使用一个字节表示R的值,一个字节表示G的值,一个字节表示B的值。
一字节可表示的数值范围:0-255 | 0x0-0xff
所以表示颜色,用3个一字节大小的数字,表示3种颜色的值
1)rgb(255,0,255)
- #ff00ff
取色器
可以使用取色器查看颜色RGB值。
qq的截图工具自带取色器工具。