【Qt】QWidget核心属性2(windowOpacity、cursor、font、toolTip、focusPolicy、styleSheet)

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 免费图标库

iconfont-阿里巴巴矢量图标库


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)

  1. #ff00ff

取色器

可以使用取色器查看颜色RGB值。

qq的截图工具自带取色器工具。

相关推荐
火山上的企鹅7 小时前
Qt WORD/PDF(五)使用Json一键填充Word表格
qt·pdf·json·word·qaxobject
机器视觉知识推荐、就业指导13 小时前
Qt/C++ 基于回调模式的海康3D相机开发流程详解(附工程源码、开发文档下载链接)
c++·数码相机·qt
mit6.82414 小时前
[Qt] 窗口 | 菜单栏MenuBar
前端·c++·qt·ubuntu
fyzy14 小时前
qt设置qwidget背景色无效
开发语言·qt
追烽少年x16 小时前
Qt的.pro文件中宏的作用
qt
孤华暗香18 小时前
深入理解观察者模式 —— Qt信号槽机制的实现
开发语言·qt·观察者模式
无敌最俊朗@1 天前
Qt+ffmpeg+libVlc 实现简单视频播放器
c语言·开发语言·c++·qt·学习·ffmpeg·音视频
睡眼红瞳1 天前
QT转到槽报错The class containing “Ui::MainWindow“ could not be found in...
qt
丘上人1 天前
qt QPainter setViewport setWindow viewport window
开发语言·qt