Qt font + ToolTip + focusPolicy + styleSheet属性(5)
文章目录
- font属性
- API接口
- 直接在Qt Designer编辑图形化界面
- 通过纯代码的方式修改文字属性
- ToolTip属性
- API接口
- 代码演示
- focusPolicy属性
- 概念理解
- API接口
- 通过编辑图形化界面演示
- styleSheet属性
- 概念理解
- 通过编辑图形化界面展示
- 代码 + 图形化界面的方式展示(夜间/日间模式)
- 动图演示
- 思路设计
- 代码展示
- 存在的问题→计算机中的颜色表示
简介:下面介绍了
GUI
开发过程中常用的四种属性,分别是编辑字体信息
,鼠标悬停时可以展示相关内容
,鼠标/Tap键点击输入框(获取焦点后)才能输入内容
,描述界面具体是啥样子
(下面动图就是演示结果)
font属性
API接口
API | 说明 |
---|---|
font() | 获取当前widget 的字体信息,返回QFont 对象 |
setFont(const QFont& font) | 设置当前widget 的字体信息 |
具体的属性说明
属性 | 说明 |
---|---|
family | 字体家族。比如 “楷体”, “宋体”, “微软雅黑” 等。 |
pointSize | 字体大小(单位是像素px ) |
weight | 字体粗细。以数值方式表示粗细程度取值范围为 [0, 99], 数值越大, 越粗。 |
bold | 是否加粗。设置为 true, 相当于 weight 为 75。设置为 false 相当于 weight 为 50。 |
italic | 是否倾斜 |
underline | 是否带有下划线 |
strikeOut | 是否带有删除线 |
直接在Qt Designer编辑图形化界面
Qt Designer
能够对界面的属性设置支持实时预览
,改了什么属性,左边的界面就能立即显示出来- 通过属性编辑这样的方式,虽然能够快速方便的修改文字相关的属性,但是还不够灵活,如果程序运行过程中需要修改文字相关的属性,那就要通过代码来操作了
通过纯代码的方式修改文字属性
- 这里咱就去创建一个
QLabel
对象,对这里面的文本内容进行各种文字相关属性的操作 - 假如要设置字体:
font.setFamily("微软雅黑")
。set
后面跟上对应的属性就可以修改对应的属性(首字母要大写,Qt也会提示补全
) - 当你往对应函数传参时,Qt也会提示你该函数传参的类型,这用的还是非常舒适的
- 上述属性具体怎么设置,实际开发中往往有专门的
美工/设计/UED
来进行确定(当然一般是大公司才有的)。那如果是一些小公司,没有美工,甚至没有产品经理怎么办? - 上面这种情况,咱们作为一个程序员就可以参考一下别人的程序是怎么安排的,或者别人写的网页是怎么安排的
#include "widget.h"
#include "ui_widget.h"
#include<QLabel>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 先去创建一个QLabel对象QLabel* label = new QLabel(this);// 设置该标签的文本信息label->setText("这是一段文本");// 先创建一个字体对象(也无需挂到对象树上)QFont font;// 设置该字体样式-微软雅黑font.setFamily("微软雅黑");// 设置该字体的大小font.setPointSize(30);// font.setPixelSize(30); 这两种用法还是有区别的,可以自己运行程序观察// 设置该字体是否加粗font.setBold(true);// 设置该字体是否倾斜font.setItalic(true);// 设置该字体是否带有下划线font.setUnderline(true);// 设置该字体是否带有删除线font.setStrikeOut(true);// 属性全部设置成功后,将font设置到label中label->setFont(font);}Widget::~Widget()
{delete ui;
}
ToolTip属性
当一个
GUI
程序界面比较复杂,按钮很多的时候。就需要一个功能:当你把鼠标悬停到这个控件上的时候,就能弹出一个提示(告诉你相关的信息内容)
API接口
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_yes->setToolTip("这是一个yes按钮");ui->pushButton_yes->setToolTipDuration(7000);ui->pushButton_no->setToolTip("这是一个no按钮");ui->pushButton_no->setToolTipDuration(3000);
}Widget::~Widget()
{delete ui;
}
Qt
会提示我们要传入函数的参数列表,其中msec
→毫秒,sec
→秒,usec
→微秒。1s = 1000ms,1ms = 1000us
focusPolicy属性
概念理解
- 计算机中的
焦点
,对于键盘操作非常明显 - 比如界面上有一个输入框,此时必须要选中这个输入框,接下来键盘按键才会输入到输入框中。那如果选中的是别的控件或者是别的窗口,此时键盘的输入就不会进入到输入框中
focusPolicy
:设置控件获取到焦点的策略。比如某个控件能否用鼠标选中或者能否通过tab键选中- 所谓
焦点
,指的就是能选中这个元素,接下来的操作(比如键盘操作),就都是针对该焦点元素进行的了,这个对于输入框,单选框,复选框等控件非常有用的 - 这个事情就和war3或者sc2中,先选中单位,再下达命令是一样的,你如果没有选中人,那技能框中就是空的
- 所谓
- 在
GUI
中,窗口/控件焦点是非常关键的。比如线上笔试,只要点击链接,打开一个网站就可以在线做题,那如果我遇到不会的题可不可以切换到百度去搜题? - 这就牵扯到了窗口焦点的问题,你在人家的网页中做题,这个网页是属于始终获取到焦点的状态的,一旦你切换到百度/其他程序(比如VS啊),人家的网页立即就能感知到失去焦点
- 此时服务器就能收集到你这样的动作,笔试结束后,就会去衡量你是否涉嫌作弊,一旦作弊是肯定通过不了笔试的,甚至可能被公司直接拉黑
- 一般来说,一个控件获取到焦点主要有两种方式:鼠标点击,键盘的Tap键
API接口
API | 说明 |
---|---|
focusPolicy() | 获取该 widget 的 focusPolicy ,返回 Qt::FocusPolicy |
setFocusPolicy(Qt::FocusPolicy policy) | 设置 widget 的 focusPolicy |
Qt::FocusPolicy
是一个枚举类型。取值如下:
- Qt::NoFocus:控件不会接收键盘和 Tap 键焦点
- Qt::TabFocus:控件可以通过 Tab 键接收焦点
- Qt::ClickFocus:控件在鼠标点击时接收焦点
- Qt::StrongFocus:控件可以通过 Tab 键和鼠标点击接收焦点(默认值)
- Qt::WheelFocus:类似于 Qt::StrongFocus,同时控件也通过鼠标滚轮获取焦点(新增的选项,一般很少使用)
通过编辑图形化界面演示
这个可以自己去测试一下,通过设置每一个控件
Line Edit
获取到焦点的不同方式,点击运行,通过鼠标点击或Tap键去获取控件焦点,再试试往框中输入内容
styleSheet属性
概念理解
- 通过
QSS
去设置widget
的样式。样式:描述了界面具体是什么样子 - 再阐述
QSS
之前先来说一下CSS
,它是一个层叠样式表,是进行网页开发的时候,设置网页样式的方式。这个东西发展多年,已经非常成熟了,内部能够提供非常丰富的功能,将网页设置的很好看 - 那Qt参考了
CSS
这一套模式,搞了一套QSS
,虽然QSS相比于CSS来说功能缺失了不少,但也能帮助我们完成不少的效果
通过编辑图形化界面展示
- 鼠标右键该
Label
控件,点击改变样式表进行编辑。也可以在右边黄色框中找到styleSheet
属性
- 在样式表中可以输入以下内容,这些内容在之后Qt的文档会详细的结束,这里只是展示一下样式表的用法。当然也可以直接在Qt文档中搜索
Qt Style Sheet
- 和
CSS
类似,QSS
设置的样式也是键值对
的格式。键和值之间使用:
分隔,键值对和键值对之间使用;
分隔
代码 + 图形化界面的方式展示(夜间/日间模式)
动图演示
思路设计
- 通过代码来设置样式,可以实现一个夜间/日间模式功能,日间模式(文字是黑色的,背景是白色的),夜间模式(文字是白色的,背景是黑色的)
- 先通过图形化界面拖拽两个按钮,一个是日间模式(
pushButton_light
),一个是夜间模式(pushButton_dark
),再拖拽一个plain Text Edit
作为内容显示的一个小窗口
- 右键点击这两个按钮转到槽定义,通过点击相应的按钮就可以去切换相对应得模式,
这里用日间模式举例,夜间模式则相反
- 要特别注意这里的单词别拼写错了,如果单词拼写错了的话,并不会有任何报错,但是样式是不会生效的
void Widget::on_pushButton_light_clicked()
{// 设置窗口得样式this->setStyleSheet("background-color:white;");// 设置输入框的样式ui->plainTextEdit->setStyleSheet("background-color:white; color: black");// 设置按钮的样式ui->pushButton_dark->setStyleSheet("color: black");ui->pushButton_light->setStyleSheet("color: black");
}
代码展示
#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_light_clicked()
{// 设置窗口的样式this->setStyleSheet("background-color:white;");// 设置输入框的样式ui->plainTextEdit->setStyleSheet("background-color:white; color: black");// 设置按钮的样式ui->pushButton_dark->setStyleSheet("color: black");ui->pushButton_light->setStyleSheet("color: black");
}void Widget::on_pushButton_dark_clicked()
{// 设置窗口的样式this->setStyleSheet("background-color: black;");// 设置输入框的样式ui->plainTextEdit->setStyleSheet("background-color: black; color: white");// 设置按钮的样式ui->pushButton_dark->setStyleSheet("color: white");ui->pushButton_light->setStyleSheet("color: white");
}
存在的问题→计算机中的颜色表示
- 如果想要去解决这个问题,首先需要认识在计算机中颜色是如何表示的。在上面代码中,是直接使用单词来设置颜色的(
white,black,red,green,blue,yellow...
),那是不是有多少个颜色单词就能设置几个颜色? - 不对,其实颜色可以说成是有无数种。在计算机中,可以使用
RGB
的方式来表示颜色。R:red,G:green,B:blue
,这就是三原色,按照这三种颜色进行不同比例的混合,就能构成不同的颜色 - 其实在美术中也有三原色的概念,只不过它所指的三原色是
红黄蓝
(这是颜料的三原色),而红绿蓝是光的三原色 - 屏幕中的像素就是一个跑含
RGB
的小灯泡,计算机中通常会使用一个字节来表示R,一个字节表示G,一个字节表示B - 那一个字节有八个比特位,总共有
0~255
种选择,也会用到十六进制表示0x0~0xFF
。另外R这个分量如果是255,则红色拉满,如果是零,则没有一点红色 - 最终去表示一个颜色就是使用
rgb(255, 0, 255)
这种方式,红绿蓝分别依次对应着三个参数,红色拉满,没有绿色,蓝色拉满。等同于写法#FF00FF
- 现在原理是弄清楚了,那该如何去找到
Widget
的初始背景色的RGB
数值呢?可以用到QQ截图(ctrl + alt + a
)的内置取色器
其实
RGB
是一种比较常见的简化版本的模型,职业做美工的人,它们买的显示器都是有专门要求的(要求色域,色深,色准等),不过对我们来说这玩意就够用了
// this->setStyleSheet("background-color: rgb(240, 240, 240);");
this->setStyleSheet("background-color: #F0F0F0");
相关文章:

Qt font + ToolTip + focusPolicy + styleSheet属性(5)
文章目录 font属性API接口直接在Qt Designer编辑图形化界面通过纯代码的方式修改文字属性 ToolTip属性API接口代码演示 focusPolicy属性概念理解API接口通过编辑图形化界面演示 styleSheet属性概念理解通过编辑图形化界面展示代码 图形化界面的方式展示(夜间/日间模…...
APM32主控键盘全功能开发实战教程:软件部分
APM32主控键盘全功能开发实战教程:从零基础到RGB矩阵高级玩法 🔥 前言:随着机械键盘DIY风潮兴起,国产APM32芯片因其高性价比和与STM32的完美兼容性,正逐渐成为键盘开发主控的新宠。本文将手把手带你从最基础的环境搭建…...
docker 部署 gin
编译与执行 ✅「静态编译语言 生成原生二进制文件 操作系统直接执行」 Go 语言之所以在工程部署场景中大受欢迎的核心优势:它直接编译成原生二进制可执行文件(binary executable)。 🔧 Go 是“静态编译语言”(编译型…...

十三: 神经网络的学习
这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程。为了使神经网络能进行学习,将导入损失函数这一指标。而学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数。为了找出尽可能小的损失函数的值,我们将介绍利…...
Qt OpenGL编程常用类
Qt提供了丰富的类来支持OpenGL编程,以下是常用的Qt OpenGL相关类: 一、QOpenGLWidget 功能:用于在 Qt 应用程序中嵌入 OpenGL 渲染的窗口部件。替代了旧版的QGLWidget。提供了OpenGL上下文和渲染表面。 继承关系:QWidget → QOpenGLWidget 属性与方法: QOpenGLWidget 属…...
数据结构 --- 顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改 顺序表分为:静态顺序表、动态顺序表 一.静态顺序表 #define N 7 typedef int SLDataType;typedef struct Seqlist {…...
MySQL高级查询技巧:分组、聚合、子查询与分页【MySQL系列】
本文将深入探讨 MySQL 高级查询技巧,重点讲解 GROUP BY、HAVING、各种聚合函数、子查询以及分页查询(LIMIT 语法)的使用。文章内容涵盖实际应用中最常见的报表需求和分页实现技巧,适合有一定 SQL 基础的开发者进一步提升技能。 一…...
无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)
在倾转旋翼无人机、垂直起降(VTOL)及混合动力飞行器的研发中,动力系统在垂直-水平模式切换时的动态性能至关重要。LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模…...
.NET8入门:14.ASP.NET Core MVC进阶——Model
上一篇文章我们了解了一下MVC在ASP.NET8中的一些基础概念,接下来深入了解一下ASP.NET Core MVC中Model的一些特性和用法。 Model 职责 Model 代表应用程序的核心数据和业务逻辑部分。它负责: 封装业务数据:表示应用程序中的实体,…...
latex figure Missing number, treated as zero. <to be read again>
\begin{figure}[h] \centering \includegraphics[width\linewidth]{pictures/architecture.pdf} \caption{Typical architecture.} \label{fig:architecture} \end{figure}, 我在编译latex,这段代码报错, Missing number, treated …...
java CompletableFuture创建异步任务(Completable异步+ExecutorService线程池)
文章目录 前置自定义线程池使用 CompletableFuture 创建异步任务 前置 来自 import java.util.concurrent.CompletableFuture; 自定义线程池 推荐根据业务需求配置 ExecutorService pool new ThreadPoolExecutor(10, // 核心线程数20, // 最大线程数60L, TimeUnit.SECONDS…...

LeetCode 高频 SQL 50 题(基础版)之 【聚合函数】部分
题目:620. 有趣的电影 题解: select * from cinema where description !boring and id%21 order by rating desc题目:1251. 平均售价 题解: select p.product_id product_id,round(ifnull(sum(p.price*u.units)/sum(u.units),0)…...

【AI学习】检索增强生成(Retrieval Augmented Generation,RAG)
1,介绍 出自论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》,RAG是权宜之计,通过RAG将问题简单化、精简化、剔除噪声,让LLM更容易理解、生成内容。RAG:检索增强技术检索生成(重…...

低成本高效图像生成:GPUGeek和ComfyUI的强强联合
一、时代背景 在如今的数字化时代,图像生成技术正不断发展和演变,尤其是在人工智能领域。无论是游戏开发、虚拟现实,还是设计创意,图像生成已成为许多应用的核心技术之一。然而,随着图像质量需求的提升,生成…...
基于Matlab实现卫星轨道模拟仿真
在IT行业中,卫星轨道模拟和仿真程序是航空航天领域的重要工具,用于预测和分析人造卫星的运动轨迹。 我们需要理解卫星轨道的基本原理。地球引力使得卫星围绕地球运动,形成特定的椭圆或圆形轨道。牛顿的万有引力定律和开普勒的行星运动定律为…...
前端使用 spark-md5 实现大文件切片上传
需要计算文件MD5和、分片MD5: 封装公共方法代码如下: import SparkMD5 from "spark-md5"/*** 计算文件MD5* param file* returns*/ export function calculateFileMD5(file) {return new Promise((resolve) > {const reader new FileRea…...

《操作系统真相还原》——进入内核
ELF 按书上的操作来,在现代操作平台编译链接默认生成elf64 格式的文件, 很显然程序头位置发生变化,因为定义elf 结构的类型中有64位,所以我们需要将编译链接出32位格式的 gcc -m32 -c -o main.o main.c ld -m elf_i386 main.o …...

【QQ音乐】sign签名| data参数 | AES-GCM加密 | webpack(上)
1.目标 网址:https://y.qq.com/n/ryqq/toplist/26 切换榜单出现请求,可以看到sign和data是加密的 2.逆向分析 搜索sign: 可以看到sign P(n.data),而n.data就是请求的加密data参数 data {"comm":{"cv":4747474,&qu…...

【STM32】按键控制LED 光敏传感器控制蜂鸣器
🔎【博主简介】🔎 🏅CSDN博客专家 🏅2021年博客之星物联网与嵌入式开发TOP5 🏅2022年博客之星物联网与嵌入式开发TOP4 🏅2021年2022年C站百大博主 🏅华为云开发…...

M-OFDM模糊函数原理及仿真
文章目录 前言一、M序列二、M-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、m-OFDM 模糊函数②、m-OFDM 距离分辨率③、m-OFDM 速度分辨率④、m-OFDM 等高线图 四、资源自取 前言 本文进行 M-OFDM 的原理讲解及仿真&#x…...

【MySQL】MVCC与Read View
目录 一、数据库并发的三种场景 二、读写场景的MVCC (一)表中的三个隐藏字段 (二)undo 日志 (三)模拟MVCC (四)Read View (五)当前读和快照读 三、RC和…...

相机--双目立体相机
教程 链接1 教程汇总 立体匹配算法基础概念 视频讲解摄像机标定和双目立体原理 两个镜头。 双目相机也叫立体相机--Stereo Camera,属于深度相机。 作用 1,获取图像特征; 2,获取图像深度信息; 原理 原理和标定 …...

多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现
多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现 目录 多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现效果一览基本介绍…...

工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”
在日常工作里,需求变动或者新增功能是再常见不过的事情了。而面对这种情况时,那些耦合度较高的代码就会给我们带来不少麻烦,因为在这样的代码基础上添加新需求往往困难重重。为了保证系统的稳定性,我们在添加新需求时,…...
23、Swift框架微调实战(3)-Qwen2.5-VL-7B LORA微调OCR数据集
一、模型介绍 Qwen2.5-VL 是阿里通义千问团队开源的视觉语言模型,具有3B、7B和72B三种不同规模,能够识别常见物体、分析图像中的文本、图表等元素,并具备作为视觉Agent的能力。 Qwen2.5-VL 具备作为视觉Agent的能力,可以推理并动态使用工具,初步操作电脑和手机。在视频处…...

37. Sudoku Solver
题目描述 37. Sudoku Solver 回溯 class Solution {vector<vector<bool>> row_used;vector<vector<bool>> col_used;vector<vector<bool>> box_used;public:void solveSudoku(vector<vector<char>>& board) {row_used.r…...
C# Renci.SshNet 登陆 suse配置一粒
C# 调用Renci.SshNet 的SSH类库,登陆 suse linux系统,如果没有配置,会报错: Renci.SshNet.Common.SshAuthenticationException: No suitable authentication method found to complete 1、需要root登陆os,配置 /etc/ssh/sshd_con…...

RV1126-OPENCV 图像叠加
一.功能介绍 图像叠加:就是在一张图片上放上自己想要的图片,如LOGO,时间等。有点像之前提到的OSD原理一样。例如:下图一张图片,在左上角增加其他图片。 二.OPENCV中图像叠加常用的API 1. copyTo方法进行图像叠加 原理…...

修改 vscode 左侧导航栏的文字大小 (更新版)
1. 起因, 目的: 问题: vscode 左侧的文字太小了!!!我最火的一篇文章,写的就是这个问题。 看来这个问题,是很广泛的一个痛点。我最近更新了 vscode, 这个问题又出现了。再来搞一下。…...
从C++编程入手设计模式2——工厂模式
从C编程入手设计模式 工厂模式 我们马上就要迎来我们的第二个创建型设计模式:工厂方法模式(Factory Method Pattern)。换而言之,我们希望使用一个这样的接口,使用其他手段而不是直接创建的方式(说的有…...