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

article/2025/8/26 23:20:48

文章目录

  • 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.hkcw.cn/article/lavCBfJhpJ.shtml

相关文章

lwip_setsockopt设置地址复用出错(lwip默认不打开,lwip_bindu也会提示端口被占用)

/* 3. 设置地址复用 */ flags lwip_setsockopt(new_sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); if (flags < 0) {NET_DEBUG_PRINT("[NET] SO_REUSEADDR failed: %s\n", strerror(errno));int opt_err errno;// 详细错误分析switch(opt_err) {c…

力扣面试150题--二叉树的右视图

Day 53 题目描述 思路 采取层序遍历&#xff0c;利用一个high的队列来保存每个节点的高度&#xff0c;highb和y记录上一个节点的高度和节点&#xff0c;在队列中&#xff0c;如果队列中顶部元素的高度大于上一个节点的高度&#xff0c;说明上一个节点就是上一层中最右边的元素…

Powerbuilder 连接达梦数据库(ODBC 和 JDBC)

一、ODBC PB只支持32位驱动&#xff0c;可以同时安装64和32位驱动&#xff0c;分别下载64和32位安装包安装 1、选择DMB ODBC DRIVER驱动 2、不描述&#xff0c;看图输信息即可 3、连接代码 SQLCA.DBMS "ODBC" SQLCA.AutoCommit False SQLCA.DBParm "Conne…

美化显示GDB调试的数据结构

笔者在前面的博文记一次pdf转Word的技术经历中有使用到mupdf库&#xff0c;该库是使用C语言写的一个操作PDF文件的库&#xff0c;同时提供了Python接口&#xff0c;Java接口和JavaScript接口。 在使用该库时&#xff0c;如果想要更高的性能&#xff0c;使用C语言接口是不二的选…

从融智学视角对决策态度进行定理级提炼,结合三标准数学建模

摘要&#xff1a;本文从融智学视角提出"决策态度定理"&#xff0c;构建了态度三要素&#xff08;化繁为简、迎难而上、乐在其中&#xff09;的数学模型。定理将人生轨迹表述为复平面路径积分&#xff1a;命运∫[态度⊗选择]dt&#xff0c;证明三要素协同作用可使决策…

秋招Day11 - JVM - 类加载机制

了解类的加载机制吗&#xff1f; JVM是运行Java字节码&#xff0c;也就是运行.class文件的虚拟机&#xff0c;JVM把.class文件中描述类的数据结构加载到内存中&#xff0c;并对数据进行校验&#xff0c;解析和初始化&#xff0c;最终转化为JVM可以使用的类型&#xff08;Klass…

纵览网丨病毒学领域的 AI 变局:机遇、隐忧与监管之路

纵览网&#xff08;www.zonglan.com&#xff09;人工智能AI正在各个领域高歌猛进&#xff0c;特别是在病毒学领域。最近在一项病毒学诊断的研究测试中&#xff0c;有着天才水平称号的OpenAI的o3模型&#xff0c;平均得分已经能够达到43.8%&#xff0c;而拥有学位的人类病毒博士…

从实验室到商用!铁电液晶如何改写显示技术格局?

一、显示技术瓶颈&#xff1a;传统液晶的「成长烦恼」 在 VR 游戏中&#xff0c;快速转动头部时画面拖影让人眩晕&#xff1b;高端投影在强光下画质模糊&#xff1b;医用显示器难以呈现 CT 影像的细微层次…… 这些困扰背后&#xff0c;是传统液晶技术在刷新率、分辨率和环境适…

电网中三相不平衡治理的全面解析

在现代电力系统中&#xff0c;三相平衡是保障电网高效、稳定运行的关键要素。然而&#xff0c;三相不平衡现象却时有发生&#xff0c;给电网的可靠供电和用电设备的安全运行带来诸多挑战。深入了解三相不平衡治理的相关知识&#xff0c;对于提升电网运行水平、保障电力供应质量…

2023年6级第一套长篇阅读

画名词概念&#xff0c;动词概念 多处定位原词加同义改写 画关键词&#xff0c;多处定位直接就可以选A了 没有定位的句子先比没匹配到的段落&#xff0c;再匹配长的段落先易后难

Opencv实用操作5 图像腐蚀膨胀

相关函数 腐蚀函数 img1_erosion cv2.erode(img1,kernel,iterations1) &#xff08;图片&#xff0c;卷积核&#xff0c;次数&#xff09; 膨胀函数 img_dilate cv2.dilate(img2,kernel1,iterations1) &#xff08;图片&#xff0c;卷积核&#xff0c;次数&#xff09;…

lua的注意事项2

总之&#xff0c;下面的返回值不是10&#xff0c;a&#xff0c;b 而且

vr中风--数据处理模型搭建与训练

# -*- coding: utf-8 -*- """ MUSED-I康复评估系统&#xff08;增强版&#xff09; 包含&#xff1a;多通道sEMG数据增强、混合模型架构、标准化处理 """ import numpy as np import pandas as pd from sklearn.model_selection import train_te…

【Oracle】DCL语言

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. DCL概述1.1 什么是DCL&#xff1f;1.2 DCL的核心功能 2. 用户管理2.1 创建用户2.2 修改用户2.3 删除用户2.4 用户信息查询 3. 权限管理3.1 系统权限3.1.1 授予系统权限3.1.2 撤销系统权限 3.2 对象权限3.2.1…

使用Redisson实现分布式锁发现的【订阅超时】Subscribe timeout: (7500ms)

背景 使用 redisson 实现分布式锁&#xff0c;出现的异常&#xff1a; org.redisson.client.RedisTimeoutException: Subscribe timeout: (7500ms). Increase ‘subscriptionsPerConnection’ and/or ‘subscriptionConnectionPoolSize’ parameters 从异常信息读的出来一些东…

异步上传石墨文件进度条前端展示记录(采用Redis中String数据结构实现-苏东坡版本)

昔者&#xff0c;有客临门&#xff0c;亟需自石墨文库中撷取卷帙若干。此等文册&#xff0c;非止一卷&#xff0c;乃累牍连篇&#xff0c;亟需批量转置。然吾辈虑及用户体验&#xff0c;当效东坡"腹有诗书气自华"之雅意&#xff0c;使操作如行云流水&#xff0c;遂定…

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

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

[Windows] 摸鱼小工具:隐藏软件(重制版)

由吾爱大神写的摸鱼工具&#xff1a; 数据存放路径为C:\Users\用户名\AppData\Local\HideSoft&#xff0c;如果不想用时&#xff0c;删除软件及此路径下的HideSoft文件夹。如添加了开机启动&#xff0c;删除启动菜单文件夹的快捷方式即可&#xff0c;或者删除前在软件中取消设置…

模块化集成建筑(MiC建筑):颠覆传统的未来建造革命

传统建筑行业长期面临"高污染、高能耗、低效率"的困境。施工现场粉尘飞扬、建材浪费严重、人工依赖度高&#xff0c;这些痛点制约着行业现代化进程。而MiC技术通过将建筑分解为标准化模块&#xff0c;彻底颠覆了传统建造模式。 在海南海口刚刚落幕的第二十一届国际绿…

【文献阅读】Hierarchical Reinforcement Learning: A ComprehensiveSurvey

Acm Computing Surveys (csur) 1区 2021年 分层强化学习&#xff1a;全面综述 分层强化学习&#xff08;HRL&#xff09;能够将具有挑战性的长时决策任务自主分解为更简单的子任务。在过去几年里&#xff0c;HRL 研究领域取得了显著发展&#xff0c;产生了大量方法。为了系…