《十》Qt各种对话框之QFontDialog

news2024/11/18 18:48:14

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):将选中的字体应用到文本框中。

运行结果:

感谢阅读!!!!!!

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

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

相关文章

用于车载T-BOX汽车级的RA8900CE

用于车载T-BOX等高精度计时的汽车级时钟模块RTC:RA8900CE.车载实时时钟芯片RA8900CE内置32.768Khz的晶体&#xff0c;实现年、月、日、星期、小时、分钟和秒精准计时。RA8900CE满足AEC-Q200认证&#xff0c;内置温补功能&#xff0c;保证实时时钟的稳定可靠&#xff0c;功耗低至…

huggingface模型下载至本地并调用教程

huggingface内有许多预训练模型&#xff0c;可以在线调用模型或者将模型部署至本地&#xff0c;但有时候通过网址调用模型会很慢&#xff0c;有些服务器甚至无法通过网址调用… 那么&#xff0c;正题&#xff0c;如何将huggingface的模型部署至本地呢&#xff1f;其实很简单&am…

MongoDB磁盘空间占满,导致数据库被锁定,如何清理数据和磁盘空间

一、问题 1、我在实际项目中&#xff0c;遇到一个问题&#xff0c;随着数据每天的不断增加&#xff0c;导致mongodb的磁盘空间站满了&#xff0c;数据库被锁了&#xff0c;无法使用。 2、故障表现 部署的应用程序突然无法将数据写入数据库&#xff0c;但是可以正常读取数据。…

如何在OpenWRT上配置SFTP远程文件传输

如何在OpenWRT上配置SFTP远程文件传输 OpenWRT 是一款广泛使用的开源路由器固件&#xff0c;它能够让普通的家用路由器具备高级路由功能&#xff0c;提供更多自定义和优化选项。本文将介绍如何在OpenWRT上配置SFTP&#xff08;SSH文件传输协议&#xff09;服务&#xff0c;以便…

SpringBoot内容协商机制(就是接受数据的类型如json,xml)

目录 一、基于请求头的内容协商机制 二、基于请求参数的内容协商机制 一、基于请求头的内容协商机制 如果我们的Java服务为浏览器和安卓手机同时提供服务&#xff0c;浏览器期望接受的请求是JSON格式&#xff0c;安卓客户端期望接收的请求是XML格式&#xff0c;这个时候是否需…

CentOS-7安装clickhouse并允许其他主机登录

一、通用设置 1、配置主机名 hostnamectl set-hostname --static 主机名2、修改hosts文件 vim /etc/hosts 输入&#xff1a; 192.168.15.129 master 192.168.15.133 node1 192.168.15.134 node2 192.168.15.136 node33、 保持服务器之间时间同步 yum install -y ntpdate &…

互联网和嵌入式,哪个更吃香?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;显然&#xff0c;互联网更受青…

Vue3+Echarts: 浏览器缩小后,图表内容发生重叠

一、问题 Vue3Echarts项目&#xff1a;浏览器缩小后&#xff0c;图表内容发生重叠。本文将提供几个解决上述问题的思路&#xff0c;后续有新的解决思路将在此处进行补充。 二、解决思路 1、动态调整ECharts配置 如果图表容器的尺寸没有随着浏览器窗口的缩小而进行相应地调整…

<计算机网络自顶向下> 无连接传输UDP

UDP&#xff1a;User Datagram Protocol “尽力而为”的服务 报文可能丢掉或者乱序好处&#xff1a; 效率高&#xff08;不建立连接无拥塞控制和流量控制【应用->传输的速率主机->网络的速率】&#xff09;报文段的头部很小&#xff08;开销小&#xff09;UDP被用于 流媒…

政安晨:【Keras机器学习示例演绎】(七)—— 利用 NeRF 进行 3D 体积渲染

目录 简介 设置 下载并加载数据 NeRF 模型 训练 可视化训练步骤 推理 渲染三维场景 可视化视频 结论 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0…

图像预处理工具_CogPolarUnwrapTool

CogPolarUnwrapTool CogPolarUnwrapTool 工具能够将环形区域通过极坐标变换 转换为矩形区域&#xff0c;方便读取 转换的步骤&#xff1a; 1.根据环形到矩形的映射来构建一个转换关系。 2.根据这个转换关系将输出图像中的像素点映射到输入图像。 3.对输入图像中的点像素进行…

浅析未来:深度学习的挑战与机遇

浅析未来&#xff1a;深度学习的挑战与机遇 1 引言 在过去的十年里&#xff0c;深度学习已经从一个相对边缘的研究领域发展成为计算机科学和人工智能中最为活跃和引人注目的领域之一。无论是在图像识别、自然语言处理、还是在更为复杂的决策制定任务中&#xff0c;深度学习技术…

索引!索引!!索引!!!到底什么是索引?

文章目录 索引的概述索引的优劣势优势劣势 索引的分类实现索引的数据结构B 树&#xff08;B-Tree&#xff09;B树&#xff08;B Tree&#xff09;哈希索引&#xff08;Hash Index&#xff09; 前言&#xff1a; 相信接触过编程的同学都听说过 索引&#xff0c;那么到底什么是索…

第六讲-流程挖掘(Process Mining)学习日志之α算法精讲

第六讲-流程挖掘&#xff08;Process Mining&#xff09;学习日志之α算法精讲 通过给定一个简单的事件日志&#xff0c;α算法可以得到一个(希望)能够重演日志的 Petri 网。同时α算法是最早的能够适当处理并发的过程发现算法之一。 参考&#xff1a;PROCESS MINING&#xff1…

【电子元件】常用的二极管、极管规格参数一览表

目录 1. 常用的二极管规格参数1.1 贴片二极管1.2 直插二极管 2. 常用的三极管规格参数2.1 贴片三极管2.2 直插三极管 参考资料 1. 常用的二极管规格参数 1.1 贴片二极管 型号/封装丝印正向压降(Vf) 反向击穿电压(Vr)平均整流电流(Io)/正向工作电流(If)反向电流(Ir)反向恢复时间…

YOLOv9训练损失、精度、mAP绘图功能 | 支持多结果对比,多结果绘在一个图片(消融实验、科研必备)

一、本文介绍 本文给大家带来的是YOLOv9系列的绘图功能&#xff0c;我将向大家介绍YOLO系列的绘图功能。我们在进行实验时&#xff0c;经常需要比较多个结果&#xff0c;针对这一问题&#xff0c;我写了点代码来解决这个问题&#xff0c;它可以根据训练结果绘制损失(loss)和mA…

怎样用PHP语言实现远程控制三路开关

怎样用PHP语言实现远程控制三路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制三路开关&#xff0c;三路开关可控制三路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi墙…

园区智慧化转型新篇章:解码智慧技术如何助力园区实现精细化管理,提升运营效率

目录 一、智慧技术概述及其在园区管理中的应用 &#xff08;一&#xff09;物联网技术的应用 &#xff08;二&#xff09;大数据技术的应用 &#xff08;三&#xff09;云计算技术的应用 二、智慧技术助力园区实现精细化管理 &#xff08;一&#xff09;实现资源优化配置…

虚拟主机 克隆机 域名解析

以下情况的处理&#xff1a; [rootlocalhost ~]# yum repolist Loaded plugins: fastestmirror, langpacks Existing lock /var/run/yum.pid: another copy is running as pid 2729. Another app is currently holding the yum lock; waiting for it to exit… The other appli…

<计算机网络自顶向下>

在计算机网络中&#xff0c;网络层包括数据平面和控制平面&#xff0c;它们分别负责网络数据转发和网络路由控制。以下是它们之间的区别&#xff1a; 数据平面&#xff08;Data Plane&#xff09;&#xff1a; 数据平面负责实际的数据传输和转发&#xff0c;它处理网络中的数据…