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

【Qt】QWidget属性2

🏠个人主页:Yui_
🍑操作环境:Qt Creator
🚀所属专栏:Qt

在这里插入图片描述

文章目录

  • 1. windowOpacity属性
  • 2. cursor属性
    • 2.1 自定义光标
  • 3. font属性
  • 4.tooltip属性
  • 5. focusPolicy属性
  • 6. 总结

由于QWidget的常见属性实在太多,不得不分为两篇文章,如果你没有看过上一篇关于QWidget属性的文章,还是推荐看一下。

1. windowOpacity属性

API说明
windowOpacity()获取到控件的不透明数值,返回float,取值范围(0.0,1.0)其中0.0表示全透明,1.0表示完全不透明。
setWindowOpacity()设置控件的不透明数值
下面我会编写一个程序,程序中有两个按钮,一个按钮会让窗口的透明度上升一个让窗口的透明度下降。
#include "widget.h"
#include "ui_widget.h"

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

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


void Widget::on_pushButton_clicked()
{
    //透明度上升
    if(this->windowOpacity()>0)
    {
        this->setWindowOpacity(this->windowOpacity()-0.1);
    }
}

void Widget::on_pushButton_2_clicked()
{
    //透明度下降
    if(this->windowOpacity()<1)
    {
        this->setWindowOpacity(this->windowOpacity()+0.1);
    }
}

qwidget_6.gif

2. cursor属性

cursor的中文释义为光标,也就是我们的鼠标光标。

API说明
cursor()获取到当前widget的cursor属性,返回QCursor对象当鼠标悬停在该widget上时,就会显示出对应的形状。
setCursor(const QCursor& cursor)设置该widget光标的形状,仅在鼠标停留在该widget上时生效。
QGuiApplication::setOverrideCursor(const QCursor& cursor)设置全局光标的形状,对整个程序中的所有widget都会生效,会覆盖setCursor设置的内容。
这里有一个简单的示例:
image.png
拖动一个控件,编辑右侧的属性栏即可改变光标样式。
如果我们用代码写,就是这样:
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPushButton* button = new QPushButton(this);
    button->resize(100,100);
    button ->move(200,200);
    button->setText("我是一个按钮~");
    //设置按钮的cursor
    button->setCursor(QCursor(Qt::WaitCursor));
}

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

按住alt点击Qt::WaitCursor我们就可以看到系内置的光标了
image.png
除此之外,我们还可以自定义光标.

2.1 自定义光标

Qt自带的光标有限,我们也可以自己找图片,做成鼠标的光标。
2233.png
我们就以这张图片为光标吧,哔哩哔哩的看板娘(不知道是22还是33~)
依旧是创建Qrc文件
image.png

创建qrc文件成功,如果你不知道如何创建qrc文件,可以去看笔者上一篇介绍qrc的文章。

#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPixmap pixmap(":/2233.png");//创建一个位图对象,加载自定义光标图片
    pixmap = pixmap.scaled(64,64);//缩放图片为64*64的尺寸
    //创建QCursor对象,并指定热点为(2,2)坐标位置
    //这里的热点就是鼠标点击时生效的位置
    QCursor cursor(pixmap,2,2);
    //设置光标
    this->setCursor(cursor);
}

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


qwidget_7.gif

3. font属性

API说明
font()获取当前widget的字体信息,返回QFont对象
setFont(const QFont&font)设置当前widget的字体信息
关于QFont
属性说明
family字体家族.⽐如"楷体",“宋体”,"微软雅⿊"等.
pointSize字体⼤⼩
weight字体粗细.以数值⽅式表⽰粗细程度取值范围为[0,99],数值越⼤,越
粗.
bold是否加粗.设置为true,相当于weight为75.设置为alse相当于
weight为50.
italic是否倾斜
underline是否带有下划线
strikeOut是否带有删除线
我们用代码来演示下吧~
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QLabel* label = new QLabel(this);
    label->setText("你好啊~");
    label->move(100,100);
    QFont font;
    font.setFamily("微软雅黑");//设置字体家族
    font.setPointSize(20);//设置字体大小
    font.setBold(true);//设置字体加粗
    font.setItalic(true);//设置字体倾斜
    font.setUnderline(true);//设置字体下划线
    font.setStrikeOut(true);//设置字体删除线
    label->setFont(font);//设置字体对象到label上
}

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

image.png
在实际开发过程中字体的属性如何选择就不需要我们操心了,有专门的美工部门~

4.tooltip属性

API说明
setToolTip()设置toolTip鼠标悬停在该widget上时会有提示说明
setToolTipDuring设置toolTip提示的时间,单位ms时间到后toolTip自动消失
下面我们会实现一个程序,来看看效果:
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->pushButton->setToolTip("这是按钮1");
    ui->pushButton->setToolTipDuration(3000);
    ui->pushButton_2->setToolTip("这是按钮2");
    ui->pushButton_2->setToolTipDuration(300);
}

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

qwidget_8.gif

5. focusPolicy属性

设置控件获取到焦点的策略,比如某个控件能否用鼠标选中或者能否通过tab键选中。
所谓“焦点”指的是能选中这个元素,接下来的操作(比如键盘操作)这都是针对该焦点元素进行的
这个对于输入框,单选框复选框等控件非常有用。
如果你玩过即时战略游戏,比如:魔兽争霸或者星际争霸等等,上面的事情就好比在这些游戏中先选中单位,在下达命令一样。

API说明
focusPolicy()获取该Widget的focusPolicy,放回Qt::FocusPilicy
setFocusPolicy(Qt::FocusPolicy policy)设置widget的focusPolicy
Qt::FocusPolicy是一个枚举类型,取值如下:
  • Qt::Nofocus:控件不会接收键盘焦点
  • Qt::TabFocus:控件可以通过Tab键接收焦点。
  • Qt::ClickFocus:控件在鼠标点击时接收焦点。
  • Qt::StrongFocus:控件可以通过Tab键和鼠标点击接收焦点。
  • Qt::WheelFocus:类似于Qt::StrongFocus同时控件也通过鼠标滚轮获取到焦点(新增选项,很少使用)。
    光看文字还是太抽象了,下面来用看演示吧~
    首先,我们双击formfile的ui文件,拖动4个按钮到中间的框内。
    image.png
    在右侧的属性栏找到该数据
    image.png

从上到下依次分别设置一下属性:
image.png
来看效果:
qwidget_9.gif
主要看黑色虚线框。
根据动图的效果我们可以得知,按钮1可以接受点击和tab键,按钮2什么都不接受,按钮3可以接受tab键,按钮4可以接受点击~
和上面设置一致~

6. 总结

本文我们又了解了许多QWidget的新属性,对于这些常见的属性大家可以好好记忆,对于不常见的属性,查文档就可以了~


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

相关文章:

  • 【项目合集】基于ESP32的智能化妆柜
  • 【Azure 架构师学习笔记】- Azure Databricks (22) --Autoloader
  • 随笔小记-本人常用桌面应用(流程图-boardmix,截图-snipaste,文件比较-beyond compare,远程控制-向日葵,解压-360压缩)
  • 机试准备第18天
  • Python的类和对象(4)
  • 在Django模型中的Mysql安装
  • oracle 基础知识之 多表查询
  • JVM---Java 类生命周期与类加载机制
  • 电子电气架构 --- 智能电动汽车的品牌竞争转变
  • 【失败了】LazyGraphRAG利用本地ollama提供Embedding model服务和火山引擎的deepseek API构建本地知识库
  • 面试系列|蚂蚁金服技术面【3】
  • C语言内存函数讲解
  • 10-SDRAM控制器的设计—— signaltap 调试
  • iptables与firewall的区别,从不同的角度讲解
  • 基于金融产品深度学习推荐算法详解【附源码】
  • C++类:特殊的数据成员
  • 鸿蒙跳转到系统设置app界面
  • JAVA(8)-数组
  • 07.Python基础4
  • Linux中安装MySQL