当前位置: 首页 > article >正文

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

1.windowOpacity

作用:不透明度

API:

windowOpacity()获取不透明度,0.0为全透明,1.0表示不透明
setWindowOpacity(float n)设置不透明度
  • 示例

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.代码方式设置

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毫秒。

时间到达后提示自动消失。

示例:

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:

font-family: '微软雅黑';
font-size: 30px;
font-style: italic;
color: green;

样式设置的语法格式:键和值之间使用":"分隔  , 键值对之间使用";"分隔

样式设置方法可以在Qt文档中搜索Qt Style Sheet。

示例2:夜间模式效果

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)

2)  #ff00ff

取色器

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

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


http://www.kler.cn/a/502939.html

相关文章:

  • Vue2:el-table 最后一列的操作按钮不换行,按钮过多时展示【更多】
  • 掌握 React 关键:理解 super () 和 super (props) 的不同应用
  • (PVG)Periodic Vibration Gaussian:自动驾驶过程中的三维重建 论文解读
  • 3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)
  • java fastjson2 解析JSON用法解析
  • [3D] 3D雷达天眼监控系统:打造智能城市的安全防线
  • 多模态论文笔记——BLIP2
  • 大语言模型的稀疏性:提升效率与性能的新方向
  • 《AI赋能鸿蒙Next,开启智能关卡设计新时代》
  • occ的开发框架
  • vue3项目大屏适配方案(scale)及vue-tv-focusable库使用
  • 基于访问表的安全防范策略
  • 【samba】主机名访问ubuntu的samba文件夹
  • 消息中间件面试
  • Ubuntu如何安装ESP32-idf
  • UML系列之Rational Rose笔记七:状态图
  • 50_Lua垃圾回收
  • 使用 Debug 类的 Assert 方法查找 C# 中的错误
  • 施耐德M241与MR30-FBS-MT 在Machine Expert V2.0的组态过程
  • opencv对算法用C++实践