[Qt 教程之Widgets模块] —— QFontComboBox 字体选择器

Qt系列教程总目录

文章目录

        • 3.2.1 创建 QFontComboBox
        • 3.2.2 成员函数
          • 1. 书写系统
          • 2. 字体过滤器
          • 3. 当前字体
          • 4. 信号

该控件用于选择字体,在一些软件中经常有类似控件,如下:

Microsoft Office:

在这里插入图片描述

Photoshop:

在这里插入图片描述

QFontComboBox 继承于 QComboBox ,所以他有 QComboBox 大部分属性与成员,但也有自己特有的。

注意:

这里虽然说是 Font 选择器,实际上每次选择只对 Font 中的 family 进行了修改,不会改变其他字体属性。 但每次选择 QFontComboBox 会返回一个同时包含其他字体属性的 Font 对象,如果直接将该对象设置给文本,那么文本当前其他的字体属性会被覆盖。所以,这里注意做好处理,只将QFontComboBox 返回的 family 属性设置给文本。

3.2.1 创建 QFontComboBox

同样,他也支持通过拖拽控件创建,也可以在自定义代码中创建。

他只有一个构造函数:

QFontComboBox(QWidget *parent = nullptr);
~QFontComboBox();

默认构造函数QFontComboBox()创建一个空的字体选择器。

也可以传入一个QWidget对象指针,QFontComboBox(QWidget *parent),它允许将字体选择器嵌入到另一个QWidget中。

3.2.2 成员函数

1. 书写系统
void setWritingSystem(QFontDatabase::WritingSystem);
QFontDatabase::WritingSystem writingSystem() const;

setWritingSystem()成员函数用于设置字体选择器所使用的书写系统。它接受一个QFontDatabase::WritingSystem参数,指定Qt应该使用哪种书写系统。

书写系统(writingSystem) :书写系统包括一个或多个文字集和一系列规则,一个书写系统至少对应一种语言,可以用书写系统的符号集合和规则比如拼写规则、大小写等来表达对应的语言,如汉字、日文、罗马字等。

以下是一个示例使用setWritingSystem方法的代码片段:

QFontComboBox *fontCombo = new QFontComboBox(this);
fontCombo->setWritingSystem(QFontDatabase::SimplifiedChinese);

其中,QFontDatabase::WritingSystem 枚举了Qt支持的书写系统:

enum WritingSystem {
    Any,

    Latin,
    Greek,
    Cyrillic,
    Armenian,
    Hebrew,
    Arabic,
    Syriac,
    Thaana,
    Devanagari,
    Bengali,
    Gurmukhi,
    Gujarati,
    Oriya,
    Tamil,
    Telugu,
    Kannada,
    Malayalam,
    Sinhala,
    Thai,
    Lao,
    Tibetan,
    Myanmar,
    Georgian,
    Khmer,
    SimplifiedChinese,
    TraditionalChinese,
    Japanese,
    Korean,
    Vietnamese,

    Symbol,
    Other = Symbol,

    Ogham,
    Runic,
    Nko,

    WritingSystemsCount
};

默认值为QFontDatabase::Any ,表示支持平台系统所有的书写系统。

2. 字体过滤器
void setFontFilters(FontFilters filters);
FontFilters fontFilters() const;

setFontFilters成员函数允许开发人员指定字体选择器可以显示的字体。它接受一个QFontComboBox::FontFilters参数,该参数允许开发人员选择要允许的字体类型。例如,可以仅允许选择等宽字体,或仅允许选择粗体或斜体字体。

以下是一个示例使用setFontFilters方法的代码片段:

QFontComboBox *fontCombo = new QFontComboBox(this);
fontCombo->setFontFilters(QFontComboBox::MonospacedFonts);

其中,QFontComboBox::FontFilters 枚举了可选择的字体类型:

enum FontFilter {
    AllFonts = 0,
    ScalableFonts = 0x1,
    NonScalableFonts = 0x2,
    MonospacedFonts = 0x4,
    ProportionalFonts = 0x8
};

说明如下:

枚举描述
QFontComboBox::AllFonts0显示所有字体
QFontComboBox::ScalableFonts0x1显示可缩放字体
QFontComboBox::NonScalableFonts0x2显示不可缩放字体
QFontComboBox::MonospacedFonts0x4显示等宽字体
QFontComboBox::ProportionalFonts0x8显示比例字体

缩放字体(ScalableFonts):是指可以按比例缩放而不会失去质量的字体。与点阵字体(BitmapFonts)相比,缩放字体可以在任何尺寸下保持线条的清晰度和平滑度,而不会像点阵字体一样在放大时变得模糊和失真。缩放字体通常用于显示需要在不同大小的显示器和不同分辨率的屏幕上按比例扩展的文本。它们的另一个优点是它们可以用来创建真正的平滑曲线,尤其是在大的字体尺寸下,这对于设计师和艺术家来说非常重要。

比例字体(ProportionalFonts):是指每一个字符都有不同的宽度。例如,在比例字体中,大写字母"O"的宽度比小写字母"i"的宽度要宽得多。比例字体通常用于文本编辑和排版,因为它可以更好地适应不同字母的宽度,从而提高文本的可读性。

等宽字体(MonospacedFonts):是指每一个字符都有相同的宽度。例如,在等宽字体中,大写字母"O"和小写字母"i"的宽度是相同的。等宽字体通常用于编程和数据展示,因为字符对于编程和数据处理来说是等价的,这种字体使得代码和表格更易于阅读和理解。

3. 当前字体

既然是和QComboBox 类似的选择器,就会有当前所选择的item这一属性。

void setCurrentFont(const QFont &f);
QFont currentFont() const;

setCurrentFont函数用于设置当前选中的字体。它接受一个QFont类型的参数,该参数指定要设置为当前字体的字体。例如:

QFont font("Arial", 12);
fontComboBox->setCurrentFont(font);

currentFont函数返回当前选中的字体。例如:

QFont font = fontComboBox->currentFont();
4. 信号

当字体被选择,列表当前值发生改变时,QFontComboBox会发出 currentFontChanged 信号。

void currentFontChanged(const QFont &f);

它包含一个QFont类型的参数,指定用户选择的新字体。

以下是一个示例使用currentFontChanged信号的代码片段:

QFontComboBox *fontCombo = new QFontComboBox(this);
connect(fontCombo, SIGNAL(currentFontChanged(const QFont &)), this, SLOT(onFontChanged(const QFont &)));

void onFontChanged(const QFont &font)
{
    // do something
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT调用glog日志流程

glog日志库是Google开源的轻量级的日志库,平时在开发过程中经常要使用到日志,本篇记录Qt项目使用glog日志库的记录。 1.首先下载cmake,Download | CMake 安装设置环境变量,检查安装情况 2.下载glog源码 git clone https://git…

JMeter录制HTTPS脚本解决办法

目录 前言: 背景 解决方法 前言: 在使用JMeter录制HTTPS脚本时,可能会遇到一些问题,例如SSL证书错误或请求失败等。解决这些问题的一种常见的方法是通过安装并信任服务器的SSL证书来解决。 背景 在对某项目进行脚本录制的时…

Django框架-5

路由系统 通过URL(Uniform Resource Locator,统一资源定位符)可以访问互联网上的资源——用户通过 浏览器向指定URL发起请求,Web服务器接收请求并返回用户请求的资源,因此可以将URL视为用户与服务器之间交互的桥梁。 …

Scrapy框架之MongoDB通过配置文件管理参数--Linux安装MongoDB--图形管理工具

目录 MongoDB通过配置文件 问题 解决方案 步骤 提示 Linux安装MongoDB 环境 下载依赖与安装包 解压安装 MongoDB GUI管理工具 独立软件GUI软件 Robo 3T使用 VSCode集成GUI插件 MongoDB通过配置文件 问题 启动MongoDB时,编写参数太麻烦 解决方案 通过配…

MATLAB App Designer基础教程 Matlab GUI入门(四)

坐标轴控件 axis 函数绘图方法技巧 作用: 绘制函数图像显示图像(jpg png tiff) 学习内容 App designer中 plot 和命令行中的 plot函数的不同;如何在坐标轴空间中显示两个函数图像;智能缩进 (Ctrl I&am…

Linux——进程通信之共享内存

目录 一. 回顾上文 二.共享内存 1.定义 2.特点: 3.实现步骤: 如下为成功链接共享内存使用权的完整步骤: 4.函数介绍 4.1shmget函数 4.1.2参数介绍 4.2ftok函数: 4.2.1参数介绍 关于ftok(); shmget();函数的代码实验…

学习Kotlin~类

类 类的field 类定义的每一个属性,kotlin都会产生一个filed,一个setter(),一个getter()field用来存储属性数据,不能直接定义,kotlin会封装,保护它里面数据,只暴露给getter和setter使用只有可变属性才有setter方法需要…

探索 Jetson Nano 为 myCobot 280 机械臂提供的强大功能

探索 Jetson Nano 为 myCobot 280 提供的强大功能,机器人技术的一个有前途的组合 介绍 近年来,科学技术的发展给我们的生活带来了许多新的产品和服务,包括机器人在各个领域的集成。机器人已经成为我们生活中必不可少的一部分,从…

Vim 自定义配色

本文首发于我的个人博客,欢迎点击访问,无广告节面简洁! 最近重新开始学习Vim装上了WSL2,但发现Windows Terminal和vim的组合还是有很多问题需要解决的,由其默认的配色在某些状态下根本看不清字体,所以折腾…

Nginx | 苹果电脑Mac安装和验证Nginx服务过程记录

common wx:CodingTechWork,一起学习进步。 引言 本文主要总结如何在Mac电脑上进行Nginx服务的安装,重点讲解使用brew命令进行安装和验证的过程及问题记录。 安装步骤 安装过程记录 查看nginx信息 首先使用命令brew info nginx进行本机ng…

《Pytorch深度学习和图神经网络(卷 1)》学习笔记——第七章

这一章内容有点丰富,多用了一些时间,实例就有四五个。 这章内容是真多啊!(学完之后又回到开头感叹) 大脑分级处理机制: 将图像从基础像素到局部信息再到整体信息 即将图片由低级特征到高级特征进行逐级计…

基于群组实现从 Azure AD 到极狐GitLab 的单点登录

目录 配置单点登录 在 Azure AD 中创建企业应用 SAML 基础配置 配置 Azure “Attributes & Claims” 配置用户同步 在极狐GitLab 创建 SCIM Token 配置 Azure Provisioning Azure 手动用户预配 测试单点登录 Azure 自动用户同步 配置群组同步 配置 SAML 群组链…

打jar包

pom文件指定打包的类型是jar&#xff0c;并指定启动主类 <packaging>jar</packaging><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>…

什么条件下会出现死锁,如何避免?

文章目录 一、什么是死锁二、产生死锁的原因&#xff1a;三、如何避免死锁&#xff1a; 一、什么是死锁 死锁&#xff0c;简单来说就是两个或者两个以上的线程在执行过程中&#xff0c;去争夺同一个共享资源导致相互等待的现象。如果没有外部干预&#xff0c;线程会一直处于阻塞…

uniapp封装门票等票务样式

先看效果图 ticketpage组件引用后&#xff0c;根据父级背景颜色改变镂空的颜色,空组件只有中间镂空的样式&#xff0c;上面是插槽heaer,下面内容是插槽content&#xff0c;可以自定义自己的内容和样式。我实现的最终效果是用的uview组件&#xff0c;如果复现需要项目引入。可…

Nginx负载均衡与动静分离

一、Nginx负载均衡&#xff1a; 1.概述&#xff1a; Nginx是一款http服务器软件&#xff0c;支持高达50000个并发连接数的响应。 &#xff08;1&#xff09;拥有强大的处理静态资源的能力。 &#xff08;2&#xff09;运行稳定。 &#xff08;3&#xff09;CPU&#xff0c…

【Unity3D编辑器开发】Unity3D中初次尝试使用PropertyDrawer属性

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 前段时间一直比较忙&#xff0c;没有时间更新博客&#xff0c;…

2011年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——纯享题目版

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &#x1f495;兴趣爱好&#xff1a;b站天天刷&…

tomcat接入skywalking

tomcat接入skywalking 一、说明二、步骤2.1 准备java-agent包2.2 tomcat部署2.2.1 下载2.2.2 tomcat修改catalina.sh文件2.2.3 tomcat修改启动端口2.2.4 启动tomcat 三、验证四、问题排查4.1 tomcat的启动日志 一、说明 服务器中已经运行着skywalking&#xff0c;准备在同一台…

7-WebApis-5

Web APIs - 5 目标&#xff1a; 能够利用JS操作浏览器,具备利用本地存储实现学生就业表的能力 BOM操作综合案例 js组成 JavaScript的组成 ECMAScript: 规定了js基础语法核心知识。比如&#xff1a;变量、分支语句、循环语句、对象等等 Web APIs : DOM 文档对象模型&#xff…
最新文章