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

【QT】常⽤控件详解(二)windowOpacitycursorfontsetToolTipfocusPolicystyleSheet

请添加图片描述

文章目录

  • 一、windowOpacity
    • 1.1 API
    • 1.2 代码示例
  • 二、cursor
    • 2.1 API
    • 2.2 代码示例
    • 2.3 代码示例
  • 三、font
    • 3.1 API
    • 3.2 代码示例
  • 四、setToolTip
    • 4.1 API
    • 4.1 代码示例
  • 五、focusPolicy
    • 5.1 API
    • 5.1 代码示例
  • 六、StyleSheet
    • 6.1 API
    • 6.1 代码示例
  • 🚩总结


一、windowOpacity

1.1 API

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

1.2 代码示例

代码⽰例:调整窗⼝透明度

  1. 在界⾯上拖放两个按钮,分别⽤来增加不透明度和减少不透明度.
    objectName分别为pushButton_addpushButton_sub
    在这里插入图片描述

2)编写wdiget.cpp,编写两个按钮的slot函数

  • 点击 pushButton_sub会减少不透明度,也就是窗口越来越透明.
  • 点击 pushButton_add会增加不透明度,窗口会逐渐恢复.
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. 执⾏程序,可以看到,点击了⼏下-之后,就可以透过窗⼝看到后⾯的Qt界面了.点击+⼜会逐渐恢复.
    在这里插入图片描述
    在这里插入图片描述

同时控制台中也可以看到opacity数值的变化
注意,C++中float类型遵守IEEE754标准,因此在进⾏运算的时候会有⼀定的精度误差.因此1 - 0.1 的数值并⾮是0.9

二、cursor

2.1 API

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

2.2 代码示例

代码⽰例:在QtDesigner中设置按钮的光标

  1. 在界⾯中创建⼀个按钮,直接在右侧属性编辑区修改cursor属性为"忙"
    在这里插入图片描述
  2. 运⾏程序,⿏标悬停到按钮上,即可看到光标的变化.

截图⽆法截到⿏标光标,试一试

  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);//创建按钮QPushButton* button = new QPushButton(this);button->resize(100, 50);button->move(100, 100);button->setText("这是一个按钮");//设置按钮的cursorbutton->setCursor(QCursor(Qt::WaitCursor));
}

系统内置的光标形状如下:

Ctrl+左键点击Qt : : waitcursor 跳转到源码即可看到.

enum CursorShape {ArrowCursor,UpArrowCursor,CrossCursor,WaitCursor,IBeamCursor,SizeVerCursor,SizeHorCursor,SizeBDiagCursor,SizeFDiagCursor,SizeAllCursor,BlankCursor,SplitVCursor,SplitHCursor,PointingHandCursor,ForbiddenCursor,WhatsThisCursor,BusyCursor,OpenHandCursor,ClosedHandCursor,DragCopyCursor,DragMoveCursor,DragLinkCursor,LastCursor = DragLinkCursor,BitmapCursor = 24,CustomCursor = 25
};

2)运⾏程序,观察效果.

截图⽆法截到⿏标光标,

2.3 代码示例

代码⽰例:⾃定义⿏标光标
Qt ⾃带的光标形状有限.我们也可以⾃⼰找个图⽚,做成⿏标的光标.

1)创建qrc资源文件,添加前缀/,并加入hachimitsu.jpg
在这里插入图片描述
在这里插入图片描述
2) 编写widget.cpp

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

请添加图片描述

三、font

3.1 API

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

font的常见属性

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

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

  1. 在界⾯上创建⼀个label,在右侧的属性编辑区,设置该label的font相关属性
    在这⾥调整上述属性,可以实时的看到⽂字的变化.
    在这里插入图片描述
  2. 执⾏程序,观察效果
    在这里插入图片描述

3.2 代码示例

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

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

在这里插入图片描述

四、setToolTip

4.1 API

API说明
setToolTip设置 toolTip。
鼠标悬停在该 widget 上时会有提示说明。
setToolTipDuring设置 toolTip 提示的时间,单位 ms。
时间到后 toolTip 自动消失。

4.1 代码示例

toolTip只是给⽤⼾看的.在代码中⼀般不需要获取到toolTip

代码⽰例:设置按钮的toolTip
1)在界面上拖放两个按钮.objectName设置为pushButton_yespushButton_no
在这里插入图片描述
2)编写widget.cpp,运⾏程序,观察效果

ui->pushButton_yes->setToolTip(“这是yes按钮”);
ui->pushButton_yes->setToolTipDuration(3000);

ui->pushButton_no->setToolTip(“这个是 no 按钮”);
ui->pushButton_no->setToolTipDuration(3000);

在这里插入图片描述

五、focusPolicy

5.1 API

焦点的那些事?

  • 设置控件获取到焦点的策略.⽐如某个控件能否⽤⿏标选中或者能否通过tab键选中.
  • 所谓"焦点",指的就是能选中这个元素.接下来的操作(⽐如键盘操作),就都是针对该焦点元素进⾏的了.这个对于输⼊框,单选框,复选框等控件⾮常有⽤的.
  • 一般来说,一个控件获取到焦点主要是两种方式:鼠标点击 和 键盘Tab键
    在这里插入图片描述
    Qt : : FocusPolicy是一个枚举类型.取值如下
  • Qt : :NoFocus:控件不会接收键盘焦点
  • Qt::TabFocus:控件可以通过Tab键接收焦点Qt::clickFocus:控件在鼠标点击时接收焦点
  • Qt : : strongFocus:控件可以通过Tab键和鼠标点击接收焦点(默认值)
  • Qt: :wheelFocus:类似于Qt: : StrongFocus ,同时控件也通过鼠标滚轮获取到焦点(新增的选项,一般很少使用).

5.1 代码示例

代码⽰例:理解不同的focusPolicy

  1. 在界⾯上创建四个单⾏输⼊框(LineEdit)
    在这里插入图片描述

  2. 修改四个输⼊框的focusPolicy 属性为Qt::StrongFocus (默认取值,⼀般不⽤额外修改)
    在这里插入图片描述

此时运⾏程序,可以看到,使⽤⿏标单击/tab,就可以移动光标所在输⼊框.从⽽接下来的输⼊就是针对
这个获取焦点的输⼊框展开的了.

  1. 修改第⼆个输⼊框的选中. focusPolicy 为Qt::NoFocus ,则第⼆个输⼊框不会被tab/⿏标左键此时在这里插入图片描述
    这个输⼊框也就⽆法输⼊内容了.

  2. 修改第⼆个输⼊框focusPolicy 为Qt::TabFocus ,则只能通过tab选中,⽆法通过⿏标选中.
    在这里插入图片描述

  3. 修改第⼆个输⼊框focusPolicy 为Qt::ClickFocus ,则只能通过tab选中,⽆法通过⿏标选中.
    在这里插入图片描述

在这里插入图片描述

六、StyleSheet

6.1 API

通过CSS设置widget的样式
css (Cascading Style Sheets层叠样式表)本身属于网页前端技术.主要就是用来描述界面的样式.
所谓"样式",包括不限于大小,位置,颜色, 间距,字体,背景,边框等.我们平时看到的丰富多彩的网页,就都会用到大量的CSS.

Qt虽然是做GUI开发,但实际上和网页前端有很多异曲同工之处.因此Qt也引入了对于CSS的支持.
CSS中可以设置的样式属性⾮常多.基于这些属性Qt只能⽀持其中⼀部分,称为QSS(QtStyleSheet)

具体的⽀持情况可以参考Qt⽂档中"QtStyleSheetsReference"章节.
此处只是进⾏⼀个简单的演⽰.

  1. 在界⾯上创建label
    在这里插入图片描述
    编辑完成样式之后,Ctrl+R运行可以看到
    在这里插入图片描述

6.1 代码示例

1)在界面上创建一个多行输入框(Text Edit)和两个按钮.
objectName分别为pushButton_lightpushButton_dark

代码⽰例:实现切换夜间模式.
你当前的代码在逻辑上有些混乱,比如点击“日间模式”和“夜间模式”按钮都设置了 background-color: #333,这不符合预期。以下是修复并完善的日夜切换完整实现,包含界面样式、控件颜色的区分处理:

  • 日间模式

    • 整体背景为浅色(如 #FFFFFF
    • 文本、按钮文字为深色(如 #000000
  • 夜间模式

    • 整体背景为深色(如 #333333
    • 文本、按钮文字为浅色(如 #FFFFFF
// 日间模式样式设置
void Widget::on_pushButton_light_clicked()
{// 窗口背景this->setStyleSheet("background-color: #FFFFFF;");// 文本编辑框:黑色文字ui->textEdit->setStyleSheet("color: #000000;");// 按钮:黑色文字、浅色背景(可根据需求调整)ui->pushButton_light->setStyleSheet("color: #000000; background-color: #F0F0F0;");ui->pushButton_dark->setStyleSheet("color: #000000; background-color: #F0F0F0;");
}// 夜间模式样式设置
void Widget::on_pushButton_dark_clicked()
{// 窗口背景this->setStyleSheet("background-color: #333333;");// 文本编辑框:白色文字ui->textEdit->setStyleSheet("color: #FFFFFF;");// 按钮:白色文字、深色背景(可根据需求调整)ui->pushButton_light->setStyleSheet("color: #FFFFFF; background-color: #555555;");ui->pushButton_dark->setStyleSheet("color: #FFFFFF; background-color: #555555;");
}
  1. 编写按钮的槽函数.
    使⽤在线调⾊板或者画图板,都可以看到数字对应的颜⾊.参考
    https://www.sojson.com/web/online.html
    在这里插入图片描述

关于计算机中的颜色表示
计算机中使用"像素"表示屏幕上的一个基本单位(也就是一个发亮的光点).
每个光点都使用三个字节表示颜色,分别是R(red),G (green), B (blue)一个字节表示(取值范围是0-255,或者Ox0O-OxFF).
混合三种不同颜色的数值比例,就能搭配出千千万万的颜色出来.
rgb(255,0,0)或者#FF0000或者#F00表示纯红色.rgb(0,255,0)或者 #00FF00或者#0F0表示纯绿色.rgb(0,0,255)或者#0000FF或者#00F表示纯蓝色.rgb(255,255,255)或者#FFFFFF或者#FFF表示纯白色.rgb(0,0,0)或者#000000或者#000表示纯黑色.
当然,上述规则只是针对一般的程序而言是这么设定的.实际的显示器,可能有8bit色深或者10bit色深等,实际情况会更加复杂.


🚩总结

按属性分类梳理,方便查阅:

属性作用说明
enabled设置控件是否可使用,true 表示可用,false 表示禁用
geometry位置和尺寸,包含 x, y, width, height 四个部分,坐标以父元素为参考设置
windowTitle设置 widget 标题
windowIcon设置 widget 图标
windowOpacity设置 widget 透明度
cursor鼠标悬停时显示的图标形状(普通箭头、沙漏、十字等),Qt Designer 中有可视化选项
font字体相关属性(字体家族、大小、粗体、斜体、下划线等样式)
toolTip鼠标悬停在 widget 上时,在状态栏显示的提示信息
toolTipDuringtoolTip 显示的持续时间
statusTipWidget 状态改变时(如按钮按下)显示的提示信息
whatsThis鼠标悬停并按 alt+F1 时,弹出窗口显示的帮助信息
styleSheet允许用 CSS 设置 widget 样式
focusPolicy控件获取焦点的策略,包含 Qt::NoFocus/Qt::TabFocus/Qt::ClickFocus/Qt::StrongFocus/Qt::WheelFocus
contextMenuPolicy上下文菜单显示策略,包含 Qt::DefaultContextMenu/Qt::NoContextMenu/Qt::PreventContextMenu
locale设置语言和国家地区
acceptDrops设置部件是否接受拖放操作,true 接收(触发 dropEvent),false 拒绝
minimumSize控件最小尺寸(含最小宽、高)
maximumSize控件最大尺寸(含最大宽、高)
sizePolicy尺寸策略,控制控件在布局管理器中的缩放方式
windowModality指定窗口是否具备“模态”行为
sizeIncrement拖动窗口大小时的增量单位
baseSize窗口基础大小,搭配 sizeIncrement 调整组件尺寸
palette调色板,设置 widget 颜色风格
mouseTracking是否跟踪鼠标移动事件,true 持续接收移动事件,false 仅接收按下/释放事件
tabletTracking是否跟踪触摸屏移动事件(类似 mouseTracking,Qt 5.9+ 引入)
layoutDirection布局方向,包含 Qt::LeftToRight/Qt::RightToLeft/Qt::GlobalAtomics
autoFillBackground是否自动填充背景颜色
windowFilePath关联 widget 与本地文件路径(实际作用有限)
accessibleName设置 widget 可访问名称,供辅助技术(如屏幕阅读器)识别
accessibleDescription设置 widget 详细描述,作用同 accessibleName,用于无障碍场景
inputMethodHints针对输入框,提示合法输入格式(如仅数字、仅日期等)

请添加图片描述

http://www.dtcms.com/a/313206.html

相关文章:

  • 大语言模型涉及的一些概念(持续更新)
  • VisualStudio的一些开发经验
  • 思二勋:数字资产化与资产数权化是RWA运作的核心逻辑
  • AtCoder Beginner Contest 417
  • MySQL事务与存储引擎的学习(一)
  • Docker国内镜像列表
  • Effective C++ 条款19: 设计class犹如设计type
  • Python从入门到精通计划Day02: Python语法探秘:当现代艺术遇到古典音乐
  • 最小半径覆盖问题【C++解法+二分+扫描线】
  • 【CF】Day118——杂题 (随机哈希 / 思维 | 贪心 / DP | 位运算构造 | 状态压缩 + 建图 + 最短路 | 构造 | 贪心)
  • 使用纯Docker命令搭建多服务环境(Linux版)
  • Python篇---包
  • 在Ansys Mechanical中对磨损进行建模
  • 力扣经典算法篇-40-螺旋矩阵(方向遍历:方向数组+已访问元素集合)
  • 【ROS2】常用命令
  • 04.Redis 的多实例
  • 双八无碳小车设计【16张cad】三维图+设计说明书
  • 【C++ 初级工程师面试--5】inline内联函数特点 、和普通函数的区别、什么时候适合内联?
  • json-server 快速搭建本地 Mock 数据服务
  • Day23--回溯--39. 组合总和,40. 组合总和 II,131. 分割回文串
  • Android 之 MVC架构
  • 线段树学习笔记 - 摩尔投票问题
  • I2C基础
  • mybatis-plus从入门到入土(四):持久层接口之BaseMapper和选装件
  • PHP现代化全栈开发:前后端分离与API架构实践
  • uni-app学习笔记01-项目初始化及相关文件
  • Go语言常量
  • 11.消息队列
  • 计算机视觉CS231n学习(2)
  • 从马武寨穿越关山