《十》Qt各种对话框之QFontDialog

2024-04-24 23:04
文章标签 qt 对话框 qfontdialog

本文主要是介绍《十》Qt各种对话框之QFontDialog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

QFontDialog

在介绍 QFontDialog 对话框之前,我们先简单介绍一下 QFont 字体类。QFont 主要用于控制文本显示的字体,字体主要有四大属性:
①字体家族 family 决定字体外观家族,比如宋体、楷体等;
②字号 pointSize (磅数)决定字显示的尺寸大小,字号 1 磅等于 1/72 英寸;
③字重 weight 决定字笔画的粗细;
④斜体 italic 决定是否倾斜显示文字。

QFont 构造函数如下:
QFont()
QFont(const QString & family, int pointSize = -1, int weight = -1, bool italic = false)
QFont(const QFont & font, QPaintDevice * pd)
QFont(const QFont & font)

第一个默认构造函数不是构造空白的字体对象,而是根据应用程序默认字体构造新对象,比如宋体9号字体对象。
第二个构造函数四个参数就是字体对象的四大属性。
第三个构造函数是根据 QPaintDevice 对象内部使用的字体复制一个相同的字体对象。
第四个构造函数是复制构造参数里的字体对象。
四大属性相对应的函数如下表所示:

针对字体重量,QFont 预设了几个档次的枚举值:

 针对字体重量,还有两个函数,可以判断和设置粗体:

bool    bold() const   // 凡是字体重量大于 QFont::Normal 都返回 true,小于等于 QFont::Normal 返回 false
void    setBold(bool enable)   //当参数为 true 时,设置字体为 QFont::Bold,如果参数 false 就设置为 QFont::Normal

字体类常用的函数介绍到这。下面我们介绍获取字体的 QFontDialog  对话框。
QFontDialog 继承了基类对话框的所有函数,可以进行模态和非模态显示,如 exec() 、show() 函数直接继承自基类。字体对话框外观如下图所示:

对话框中左上角位置是字体家族名称,上部中间是字体风格,包含粗体斜体设置,右上角是字号磅数。对话框左下角是字体效果删除线、下划线,以及书写系统 习惯,比如简 体中文 Simplified Chinese。右下角是当前选中字体显示样例。
QFontDialog 也有两种使用方式,第一种是自定义字体对话框,使用普通成员函数获取字体;第二种是使用静态函数,模态弹窗获取字体 

(1)QFontDialog 普通成员函数

QFontDialog 构造函数如下:

QFontDialog(QWidget * parent = 0)
QFontDialog(const QFont & initial, QWidget * parent = 0)

参数 parent  是父窗口指针,第二个构造函数可以指定初始显示的字体 initial 。
QFontDialog 获取字体的普通函数也分两种场景,一种场景是对话框持续显示时,用户点击选择的字体:

QFont    currentFont() const      //获取当前选中的字体
void    setCurrentFont(const QFont & font)  //设置当前字体
void    currentFontChanged(const QFont & font)  //信号,当前字体变化时触发该信号

参数 parent  是父窗口指针,第二个构造函数可以指定初始显示的字体 initial 。
QFontDialog 获取字体的普通函数也分两种场景,一种场景是对话框持续显示时,用户点击选择的字体:

QFont    currentFont() const      //获取当前选中的字体
void    setCurrentFont(const QFont & font)  //设置当前字体
void    currentFontChanged(const QFont & font)  //信号,当前字体变化时触发该信号

对于非模态显示的自定义字体对话框,关联 currentFontChanged() 信号可以实时获取用户点选的字体,并进行同步字体设置。用户只要不停地换字体,currentFontChanged() 就不停地触发,该信号与字体对话框显示都是持续的。
另一种场景是点击“OK”按钮后最终选择的字体:

QFont    selectedFont() const    //点击“OK”按钮后最终选择的字体
void    fontSelected(const QFont & font)  //信号,点击“OK”按钮后触发该信号,参数是最终选择字体

点击“OK”按钮之后,字体对话框会关闭,因此是最终选择的字体。fontSelected() 随着对话框关闭触发,是一次性的。

QFontDialog 重载了基类的打开函数:

void QFontDialog::​open(QObject * receiver, const char * member)

这个打开函数是一次性的,将信号 fontSelected() 关联到 receiver 对象的 member 槽函数上,方便传递最终选择的字体,对话框关闭后,自动解除信号和槽函数绑定,只有一次触发。
QFontDialog 也有对话框选项 FontDialogOption 的设置:

FontDialogOptions    options() const  //获取字体对话框选项
void    setOptions(FontDialogOptions options)  //设置字体对话框选项
void    setOption(FontDialogOption option, bool on = true)  //启用或禁用一个选项标志位
bool    testOption(FontDialogOption option) const  //测试一个选项标志位是否为 true

QFontDialog::​FontDialogOptions 标志位枚举常量如下表所示:

通常都是使用默认的标志位数值 0,有定制需求时才设置上面的标志位。

(2)QFontDialog 静态成员函数

字体对话框提供了两个便捷的获取字体静态函数,模态显示临时的对话框对象: 

QFont    getFont(bool * ok, QWidget * parent = 0)
QFont    getFont(bool * ok, const QFont & initial, QWidget * parent = 0, const QString & title = QString(), FontDialogOptions options = 0)

 ok 指针指向表示用户点击对话框“OK”按钮(true)或“Cancel”按钮(false)的状态值;parent 是父窗口指针。
第二个 getFont() 还带有其他参数:初始化的字体 initial,对话框标题 title ,对话框标志位选项 options 。
两个 getFont() 在用户点击“OK”按钮后,返回最终选择的字体;如果用户点击“Cancel”按钮或按 Esc 键,那么第一个 getFont() 返回应用程序默认字体,第二个 getFont() 返回参数里的 initial 字体。
getFont() 返回的字体对象本身总是有效的,用户点击 OK”按钮或“Cancel”按钮的状态就靠 * ok 变量的真假状态来区分。getFont() 静态函数使用示例:

    bool bOK = false;QFont font = QFontDialog::getFont( &bOK );if( bOK ){ui->pushButtonFont->setFont(font);}else{qDebug()<<"Use the old font.";}

Qt 应用程序的默认字体可以进行读取或修改:

QFont QApplication::​font()   //静态函数,获取应用程序默认的字体
void QApplication::​setFont(const QFont & font, const char * className = 0)  //静态函数,设置应用程序默认字体

参数 className  默认是空的,表示字体对程序所有界面类的对象生效;
如果设置了 className  字符串,那么字体仅对 className  类及其派生类对象生效。

举例:

//头文件
#include<qpushbutton.h>
#include<QLineEdit>
#include<QFontDialog>
#include<QGridLayout>
//...........private:QGridLayout* glayout;QPushButton *fontbutton;QLineEdit *fontlineedit;
//源文件
#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent)
{setWindowTitle("字体对话框测试");this->setGeometry(200,100,500,400);glayout=new QGridLayout(this);fontbutton =new QPushButton("字体调用对话框");fontlineedit=new QLineEdit;fontlineedit->setText("我会成功");glayout->addWidget(fontbutton,0,0);glayout->addWidget(fontlineedit,1,0);connect(fontbutton,SIGNAL(clicked()),this,SLOT(dispFontFunc()));}Dialog::~Dialog()
{
}void Dialog::dispFontFunc()
{bool isbool;QFont font=QFontDialog::getFont(&isbool);if(isbool){fontlineedit->setFont(font);}
}

具体代码解析如下:

  1. #include "dialog.h":引入了一个名为"dialog.h"的头文件。
  2. Dialog::Dialog(QWidget *parent) : QDialog(parent):对话框类的构造函数,接受一个QWidget类型的指针作为参数,并调用了QDialog类的构造函数。
  3. setWindowTitle("字体对话框测试"):设置对话框的标题为"字体对话框测试"。
  4. this->setGeometry(200,100,500,400):设置对话框的位置和大小。
  5. glayout=new QGridLayout(this):创建一个网格布局管理器对象,并将其设置为对话框的布局管理器。
  6. fontbutton =new QPushButton("字体调用对话框"):创建一个按钮对象,并设置按钮上显示的文本为"字体调用对话框"。
  7. fontlineedit=new QLineEdit:创建一个单行文本框对象。
  8. fontlineedit->setText("我会成功"):设置文本框的初始文本为"我会成功"。
  9. glayout->addWidget(fontbutton,0,0):将按钮添加到布局管理器中的第一行第一列。
  10. glayout->addWidget(fontlineedit,1,0):将文本框添加到布局管理器中的第二行第一列。
  11. connect(fontbutton,SIGNAL(clicked()),this,SLOT(dispFontFunc())):连接按钮的点击信号与槽函数dispFontFunc(),即当按钮被点击时,会调用dispFontFunc()函数。
  12. Dialog::~Dialog():对话框类的析构函数。
  13. void Dialog::dispFontFunc():槽函数dispFontFunc()的实现。
  14. bool isbool:定义一个bool类型的变量isbool。
  15. QFont font=QFontDialog::getFont(&isbool):调用QFontDialog类的静态函数getFont(),弹出一个字体选择对话框,并将用户选择的字体赋值给font变量。同时,将用户是否选择了字体保存在isbool变量中。
  16. if(isbool):如果用户选择了字体,则执行下面的代码。
  17. fontlineedit->setFont(font):将选中的字体应用到文本框中。

运行结果:

感谢阅读!!!!!!

这篇关于《十》Qt各种对话框之QFontDialog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933077

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

使用Qt编程QtNetwork无法使用

使用 VS 构建 Qt 项目时 QtNetwork 无法使用的问题 - 摘叶飞镖 - 博客园 (cnblogs.com) 另外,强烈建议在使用QNetworkAccessManager之前看看这篇文章: Qt 之 QNetworkAccessManager踏坑记录-CSDN博客 C++ Qt开发:QNetworkAccessManager网络接口组件 阅读目录 1.1 通用API函数

Qt多语种开发教程

Qt作为跨平台的开发工具,早已应用到各行各业的软件开发中。 今天讲讲,Qt开发的正序怎么做多语言开发。就是说,你设置中文,就中文显示;设置英语就英文显示,设置繁体就繁体显示,设置发育就显示法语等。 开发环境(其实多语种这块根环境没太大关系):win10,Qt.5.12.10 一.先用QtCreator创建一个简单的桌面程序 1.工程就随便命名“LanguageTest”,其他默认。 2.在设计师

Qt中window frame的影响

window frame 在创建图形化界面的时候,会创建窗口主体,上面会多出一条,周围多次一圈细边,这就叫window frame窗口框架,这是操作系统自带的。 这个对geometry的一些属性有一定影响,主要体现在Qt坐标系体系: 窗口当中包含一个按钮,这个按钮的坐标系是以父元素为参考,那么这个参考是widget本体作为参考,还是window frame作为参考,这两种参考体系都存在

【Qt】定时器事件

定时器事件 在之前学习QTimer中实现了定时器的功能,而在QTimer背后是QTimerEvent定时器事件进行支撑的。在QObject中提供了一个timeEvent这个函数。 startTimer启动定时器killTimer关闭定时器 Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定 时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀

vue2实践:第一个非正规的自定义组件-动态表单对话框

前言 vue一个很重要的概念就是组件,作为一个没有经历过前几代前端开发的我来说,不太能理解它所带来的“进步”,但是,将它与后端c++、java类比,我感觉,组件就像是这些语言中的类和对象的概念,通过封装好的组件(类),可以通过挂载的方式,非常方便的调用其提供的功能,而不必重新写一遍实现逻辑。 我们常用的element UI就是由饿了么所提供的组件库,但是在项目开发中,我们可能还需要额外地定义一

QT 编译报错:C3861: ‘tr‘ identifier not found

问题: QT 编译报错:C3861: ‘tr’ identifier not found 原因 使用tr的地方所在的类没有继承自 QObject 类 或者在不在某一类中, 解决方案 就直接用类名引用 :QObject::tr( )

在 Qt Creator 中,输入 /** 并按下Enter可以自动生成 Doxygen 风格的注释

在 Qt Creator 中,当你输入 /** 时,确实会自动补全标准的 Doxygen 风格注释。这是因为 Qt Creator 支持 Doxygen 以及类似的文档注释风格,并且提供了代码自动补全功能。 以下是如何在 Qt Creator 中使用和显示这些注释标记的步骤: 1. 自动补全 Doxygen 风格注释 在 Qt Creator 中,你可以这样操作: 在你的代码中,将光标放在