【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的截图工具自带取色器工具。

相关推荐
用户805533698032 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner2 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz7 天前
QML Hello World 入门示例
qt
xcyxiner10 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner11 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner11 天前
DicomViewer (添加模型类)3
qt
xcyxiner12 天前
DicomViewer (目录调整) 2
qt
xcyxiner12 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能14 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G14 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt