Qt font + ToolTip + focusPolicy + styleSheet属性(5)

news2025/7/22 7:59:23

文章目录

  • 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属性

概念理解

  1. 计算机中的焦点,对于键盘操作非常明显
  2. 比如界面上有一个输入框,此时必须要选中这个输入框,接下来键盘按键才会输入到输入框中。那如果选中的是别的控件或者是别的窗口,此时键盘的输入就不会进入到输入框中
    在这里插入图片描述
  3. focusPolicy:设置控件获取到焦点的策略。比如某个控件能否用鼠标选中或者能否通过tab键选中
    • 所谓焦点,指的就是能选中这个元素,接下来的操作(比如键盘操作),就都是针对该焦点元素进行的了,这个对于输入框,单选框,复选框等控件非常有用的
    • 这个事情就和war3或者sc2中,先选中单位,再下达命令是一样的,你如果没有选中人,那技能框中就是空的 在这里插入图片描述
  4. GUI中,窗口/控件焦点是非常关键的。比如线上笔试,只要点击链接,打开一个网站就可以在线做题,那如果我遇到不会的题可不可以切换到百度去搜题?
  5. 这就牵扯到了窗口焦点的问题,你在人家的网页中做题,这个网页是属于始终获取到焦点的状态的,一旦你切换到百度/其他程序(比如VS啊),人家的网页立即就能感知到失去焦点
  6. 此时服务器就能收集到你这样的动作,笔试结束后,就会去衡量你是否涉嫌作弊,一旦作弊是肯定通过不了笔试的,甚至可能被公司直接拉黑
  7. 一般来说,一个控件获取到焦点主要有两种方式:鼠标点击,键盘的Tap键

API接口

API说明
focusPolicy()获取该 widgetfocusPolicy,返回 Qt::FocusPolicy
setFocusPolicy(Qt::FocusPolicy policy)设置 widgetfocusPolicy

Qt::FocusPolicy 是一个枚举类型。取值如下:

  • Qt::NoFocus:控件不会接收键盘和 Tap 键焦点
  • Qt::TabFocus:控件可以通过 Tab 键接收焦点
  • Qt::ClickFocus:控件在鼠标点击时接收焦点
  • Qt::StrongFocus:控件可以通过 Tab 键和鼠标点击接收焦点(默认值)
  • Qt::WheelFocus:类似于 Qt::StrongFocus,同时控件也通过鼠标滚轮获取焦点(新增的选项,一般很少使用)

通过编辑图形化界面演示

在这里插入图片描述

这个可以自己去测试一下,通过设置每一个控件Line Edit获取到焦点的不同方式,点击运行,通过鼠标点击或Tap键去获取控件焦点,再试试往框中输入内容

请添加图片描述

styleSheet属性

概念理解

  1. 通过QSS去设置widget的样式。样式:描述了界面具体是什么样子
  2. 再阐述QSS之前先来说一下CSS,它是一个层叠样式表,是进行网页开发的时候,设置网页样式的方式。这个东西发展多年,已经非常成熟了,内部能够提供非常丰富的功能,将网页设置的很好看
  3. 那Qt参考了CSS这一套模式,搞了一套QSS,虽然QSS相比于CSS来说功能缺失了不少,但也能帮助我们完成不少的效果

通过编辑图形化界面展示

  1. 鼠标右键该Label控件,点击改变样式表进行编辑。也可以在右边黄色框中找到styleSheet属性
    在这里插入图片描述
  2. 在样式表中可以输入以下内容,这些内容在之后Qt的文档会详细的结束,这里只是展示一下样式表的用法。当然也可以直接在Qt文档中搜索Qt Style Sheet
    在这里插入图片描述
  3. CSS类似,QSS设置的样式也是键值对的格式。键和值之间使用:分隔,键值对和键值对之间使用;分隔

代码 + 图形化界面的方式展示(夜间/日间模式)

动图演示

请添加图片描述

思路设计

  1. 通过代码来设置样式,可以实现一个夜间/日间模式功能,日间模式(文字是黑色的,背景是白色的),夜间模式(文字是白色的,背景是黑色的)
  2. 先通过图形化界面拖拽两个按钮,一个是日间模式(pushButton_light),一个是夜间模式(pushButton_dark),再拖拽一个plain Text Edit作为内容显示的一个小窗口
    在这里插入图片描述
  3. 右键点击这两个按钮转到槽定义,通过点击相应的按钮就可以去切换相对应得模式,这里用日间模式举例,夜间模式则相反
  4. 要特别注意这里的单词别拼写错了,如果单词拼写错了的话,并不会有任何报错,但是样式是不会生效的
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");
}

存在的问题→计算机中的颜色表示

在这里插入图片描述

  1. 如果想要去解决这个问题,首先需要认识在计算机中颜色是如何表示的。在上面代码中,是直接使用单词来设置颜色的(white,black,red,green,blue,yellow...),那是不是有多少个颜色单词就能设置几个颜色?
  2. 不对,其实颜色可以说成是有无数种。在计算机中,可以使用RGB的方式来表示颜色。R:red,G:green,B:blue,这就是三原色,按照这三种颜色进行不同比例的混合,就能构成不同的颜色
  3. 其实在美术中也有三原色的概念,只不过它所指的三原色是红黄蓝(这是颜料的三原色),而红绿蓝是光的三原色
  4. 屏幕中的像素就是一个跑含RGB的小灯泡,计算机中通常会使用一个字节来表示R,一个字节表示G,一个字节表示B
  5. 那一个字节有八个比特位,总共有0~255种选择,也会用到十六进制表示0x0~0xFF另外R这个分量如果是255,则红色拉满,如果是零,则没有一点红色
  6. 最终去表示一个颜色就是使用rgb(255, 0, 255)这种方式,红绿蓝分别依次对应着三个参数,红色拉满,没有绿色,蓝色拉满。等同于写法#FF00FF
  7. 现在原理是弄清楚了,那该如何去找到Widget的初始背景色的RGB数值呢?可以用到QQ截图(ctrl + alt + a)的内置取色器
    在这里插入图片描述

其实RGB是一种比较常见的简化版本的模型,职业做美工的人,它们买的显示器都是有专门要求的(要求色域,色深,色准等),不过对我们来说这玩意就够用了

在这里插入图片描述

// this->setStyleSheet("background-color: rgb(240, 240, 240);");
this->setStyleSheet("background-color: #F0F0F0");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2395899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十三: 神经网络的学习

这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程。为了使神经网络能进行学习&#xff0c;将导入损失函数这一指标。而学习的目的就是以该损失函数为基准&#xff0c;找出能使它的值达到最小的权重参数。为了找出尽可能小的损失函数的值&#xff0c;我们将介绍利…

LeetCode 高频 SQL 50 题(基础版)之 【聚合函数】部分

题目&#xff1a;620. 有趣的电影 题解&#xff1a; select * from cinema where description !boring and id%21 order by rating desc题目&#xff1a;1251. 平均售价 题解&#xff1a; select p.product_id product_id,round(ifnull(sum(p.price*u.units)/sum(u.units),0)…

【AI学习】检索增强生成(Retrieval Augmented Generation,RAG)

1&#xff0c;介绍 出自论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》&#xff0c;RAG是权宜之计&#xff0c;通过RAG将问题简单化、精简化、剔除噪声&#xff0c;让LLM更容易理解、生成内容。RAG&#xff1a;检索增强技术检索生成&#xff08;重…

低成本高效图像生成:GPUGeek和ComfyUI的强强联合

一、时代背景 在如今的数字化时代&#xff0c;图像生成技术正不断发展和演变&#xff0c;尤其是在人工智能领域。无论是游戏开发、虚拟现实&#xff0c;还是设计创意&#xff0c;图像生成已成为许多应用的核心技术之一。然而&#xff0c;随着图像质量需求的提升&#xff0c;生成…

《操作系统真相还原》——进入内核

ELF 按书上的操作来&#xff0c;在现代操作平台编译链接默认生成elf64 格式的文件&#xff0c; 很显然程序头位置发生变化&#xff0c;因为定义elf 结构的类型中有64位&#xff0c;所以我们需要将编译链接出32位格式的 gcc -m32 -c -o main.o main.c ld -m elf_i386 main.o …

【QQ音乐】sign签名| data参数 | AES-GCM加密 | webpack(上)

1.目标 网址&#xff1a;https://y.qq.com/n/ryqq/toplist/26 切换榜单出现请求&#xff0c;可以看到sign和data是加密的 2.逆向分析 搜索sign: 可以看到sign P(n.data)&#xff0c;而n.data就是请求的加密data参数 data {"comm":{"cv":4747474,&qu…

【STM32】按键控制LED 光敏传感器控制蜂鸣器

&#x1f50e;【博主简介】&#x1f50e; &#x1f3c5;CSDN博客专家 &#x1f3c5;2021年博客之星物联网与嵌入式开发TOP5 &#x1f3c5;2022年博客之星物联网与嵌入式开发TOP4 &#x1f3c5;2021年2022年C站百大博主 &#x1f3c5;华为云开发…

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 &#xff08;一&#xff09;表中的三个隐藏字段 &#xff08;二&#xff09;undo 日志 &#xff08;三&#xff09;模拟MVCC &#xff08;四&#xff09;Read View &#xff08;五&#xff09;当前读和快照读 三、RC和…

相机--双目立体相机

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

多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现

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

工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”

在日常工作里&#xff0c;需求变动或者新增功能是再常见不过的事情了。而面对这种情况时&#xff0c;那些耦合度较高的代码就会给我们带来不少麻烦&#xff0c;因为在这样的代码基础上添加新需求往往困难重重。为了保证系统的稳定性&#xff0c;我们在添加新需求时&#xff0c;…

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…

RV1126-OPENCV 图像叠加

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

修改 vscode 左侧导航栏的文字大小 (更新版)

1. 起因&#xff0c; 目的: 问题&#xff1a; vscode 左侧的文字太小了&#xff01;&#xff01;&#xff01;我最火的一篇文章&#xff0c;写的就是这个问题。 看来这个问题&#xff0c;是很广泛的一个痛点。我最近更新了 vscode&#xff0c; 这个问题又出现了。再来搞一下。…

云原生 Cloud Native Build (CNB)使用初体验

云原生 Cloud Native Build&#xff08;CNB&#xff09;使用初体验 引言 当“一切皆可云”成为趋势&#xff0c;传统开发环境正被云原生工具重塑。腾讯云CNB&#xff08;Cloud Native Build&#xff09;作为一站式开发平台&#xff0c;试图解决多环境协作难题。 本文将分享c…

格式工厂 FormatFactory v5.20.便携版 ——多功能媒体文件转换工具 长期更新

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VORWF3Q7D0eCVV06LHbzheD-A1?pwdjikz# 【​本章下载二】&#xff1a;https://pan.quark.cn/s/8ee59ed83658 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…

数据可视化--使用matplotlib绘制高级图表

目录 一、绘制等高线图 contour() 二、绘制矢量场流线图 streamplot() 三、绘制棉棒图 stem() 四、绘制哑铃图 五、绘制甘特图 六、绘制人口金字塔图 barh() 七、绘制漏斗图 简易版漏斗图 八、绘制桑基图 Sankey()---创建桑基图 add()---添加桑基图的选项 finish()…

如何做好一个决策:基于 Excel的决策树+敏感性分析应用

决策点: 开发新产品? (是 / 否) 因素 (如果是): 市场接受度 (高 / 中 / 低);概率: 高(0.3), 中(0.5), 低(0.2) 结果值 (NPV): 高(+$1M), 中(+$0.2M), 低(-$0.5M) 不开发成本/收益: $0 开发计算: EMV(市场接受度) = (0.3 * 1M) + (0.5 * 0.2M) + (0.2 * -0.5M) = $0.3M + $…

【模拟电子电路-工具使用】

模拟电子电路-工具使用 ■ 1. 模拟软件■ 1. circuit JS ■ 2. 万用表■ 3. 示波器■ 4.■ 5.■ 6.■ 7. ■ 1. 模拟软件 ■ 1. circuit JS ■ 2. 万用表 ■ 3. 示波器 ■ 4. ■ 5. ■ 6. ■ 7.