QWidget 属性——windowOpacity&cursor&font

🐌博主主页:🐌​倔强的大蜗牛🐌​
📚专栏分类:QT
❤️感谢大家点赞👍收藏⭐评论✍️


一、windowOpacity

windowOpacity 通常用于设置窗口(Window)的透明度。

API

API说明
windowOpacity()获取到控件的不透明数值. 返回 float, 取值为 0.0 -> 1.0 其中 0.0 表示全透明, 1.0 表示完全不透明.
setWindowOpacity(float n)设置控件的不透明数值.

代码示例: 调整窗口透明度

  1. 在界面上拖放两个按钮, 分别用来增加不透明度和减少不透明度.
    objectName 分别为 pushButton_add 和 pushButton_sub.
    在这里插入图片描述
  2. 编写 wdiget.cpp, 编写两个按钮的 slot 函数
  • 点击 pushButton_sub 会减少不透明度, 也就是窗口越来越透明.
  • 点击 pushButton_add 会增加不透明度, 窗口会逐渐恢复.
#include "widget.h"
#include "ui_widget.h"
#include<qDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}
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);
}
  1. 执行程序, 可以看到, 点击了几下 - 之后, 就可以透过窗口看到后面的猫猫头了. 点击 + 又会逐渐恢复.
    在这里插入图片描述
    同时控制台中也可以看到 opacity 数值的变化
    在这里插入图片描述

注意, C++ 中 float 类型遵守 IEEE 754 标准, 因此在进行运算的时候会有一定的精度误差. 因此 1 - 0.1 的数值并非是 0.9 .

二、cursor

在 GUI 编程中,cursor 通常指的是屏幕上显示的光标,它随着鼠标或触摸板的操作而移动。例如,当用户在桌面上移动鼠标时,光标会随之移动,以指示当前鼠标指针的位置。程序员可以通过编程控制光标的形状、颜色和行为。

API

API说明
cursor()获取到当前 widget 的 cursor 属性, 返回 QCursor 对象.
当鼠标悬停在该 widget 上时, 就会显示出对应的形状.
setCursor(const QCursor& cursor)设置该 widget 光标的形状. 仅在鼠标停留在该 widget 上时生效.
QGuiApplication::setOverrideCursor(const QCursor& cursor)设置全局光标的形状. 对整个程序中的所有 widget 都会生效. 覆盖上面的 setCursor 设置的内容.

代码示例:在 Qt Designer 中设置按钮的光标

  1. 在界面中创建一个按钮.
    在这里插入图片描述
  2. 直接在右侧属性编辑区修改 cursor 属性为 “等待”
    在这里插入图片描述
  3. 运行程序, 鼠标悬停到按钮上, 即可看到光标的变化
    在这里插入图片描述

代码示例: 通过代码设置按钮的光标

  1. 编写 widget.cpp
    其中 Qt::WaitCursor 就是自带的沙漏形状的光标.
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

   QCursor cursor(Qt::WaitCursor);
    ui->pushButton->setCursor(cursor);
}

Widget::~Widget()
{
    delete ui;
}

系统内置的光标形状如下:
Ctrl + 左键 点击 Qt::WaitCursor 跳转到源码即可看到.
在这里插入图片描述
2) 运行程序, 观察效果
在这里插入图片描述

代码示例:自定义鼠标光标

Qt 自带的光标形状有限. 我们也可以自己找个图片, 做成鼠标的光标.
在这里插入图片描述

  1. 创建 qrc 资源文件, 添加前缀 / , 并加入 dawoniu.png
    在这里插入图片描述
    在这里插入图片描述
  2. 编写 widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QCursor>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //访问到图片文件
    QPixmap pixmap(":/dawoniu.png");
    //将图片进行缩放
    pixmap =pixmap.scaled(10,10);
    //构造光标对象
    QCursor cursor(pixmap,10,10);
    //把光标设置进去
    this->setCursor(cursor);
}

Widget::~Widget()
{
    delete ui;
}
  1. 运行程序, 观察效果
    在这里插入图片描述

三、font

API

API说明
font()获取当前 widget 的字体信息. 返回 QFont 对象.
setFont(const QFont& font)设置当前 widget 的字体信息.

关于 QFont

属性说明
family字体家族. ⽐如 “楷体”, “宋体”, “微软雅⿊” 等.
pointSize字体⼤⼩
weight字体粗细. 以数值⽅式表⽰粗细程度取值范围为 [0, 99], 数值越⼤, 越粗.
bold是否加粗. 设置为 true, 相当于 weight 为 75. 设置为 false 相当于weight 为 50.
italic是否倾斜
underline是否带有下划线
strikeOut是否带有删除线

代码示例: 在 Qt Designer 中设置字体属性

  1. 在界面上创建一个 label
    在这里插入图片描述
  2. 在右侧的属性编辑区, 设置该 label 的 font 相关属性
    在这里插入图片描述
  3. 执行程序, 观察效果
    在这里插入图片描述

代码示例: 在代码中设置字体属性

  1. 在界面中创建 label, objectName 使用默认的 label 即可.
    在这里插入图片描述
  2. 修改 widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QLabel>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QFont font;
     // 设置字体家族
     font.setFamily("仿宋");
     // 设置字体⼤⼩
     font.setPointSize(20);
     // 设置字体加粗
     font.setBold(true);
     // 设置字体倾斜
     font.setItalic(true);
     // 设置字体下划线
     font.setUnderline(true);
     // 设置字体删除线
     font.setStrikeOut(true);
     // 设置字体对象到 label 上
     ui->label->setFont(font);
}

Widget::~Widget()
{
    delete ui;
}
  1. 运行程序, 观察效果
    在这里插入图片描述

❤️结语:
本次精彩内容已圆满结束!希望各位读者在阅读过程中能够收获满满。在此,特别感谢各位读者的支持与三连赞。如果文章中存在任何问题或不足之处,欢迎在评论区留言,蜗牛必定会认真对待并加以改进,以便为大家呈现更优质的文章。你们的支持与鼓励,将是博主不断前进的最大动力。再次感谢大家的陪伴与支持!

  • 59
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倔强的大蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值