当前位置:   article > 正文

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

字体选择器

Qt系列教程总目录

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

Microsoft Office:

在这里插入图片描述

Photoshop:

在这里插入图片描述

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

注意:

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

3.2.1 创建 QFontComboBox

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

他只有一个构造函数:

QFontComboBox(QWidget *parent = nullptr);
~QFontComboBox();
  • 1
  • 2

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

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

3.2.2 成员函数
1. 书写系统
void setWritingSystem(QFontDatabase::WritingSystem);
QFontDatabase::WritingSystem writingSystem() const;
  • 1
  • 2

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

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

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

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

其中,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
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

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

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

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

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

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

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

enum FontFilter {
    AllFonts = 0,
    ScalableFonts = 0x1,
    NonScalableFonts = 0x2,
    MonospacedFonts = 0x4,
    ProportionalFonts = 0x8
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

说明如下:

枚举描述
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;
  • 1
  • 2

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

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

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

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

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

void currentFontChanged(const QFont &f);
  • 1

它包含一个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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/919518
推荐阅读
相关标签
  

闽ICP备14008679号