QML FontDialog:使用FontDialog实现字体选择功能

news2025/4/23 8:43:54

目录

    • 引言
    • 相关阅读
      • FontDialog基本介绍
      • 字体属性
    • 实例演示
      • 项目结构
      • 代码实现
        • Main.qml
        • main.cpp
      • 代码解析
      • 运行效果
    • 总结

引言

在桌面应用程序开发中,字体选择是一个常见的需求。Qt Quick提供了FontDialog组件来实现这一功能。本文将介绍如何在Qt Quick应用程序中使用FontDialog组件来实现字体的选择和预览功能。

相关阅读

FontDialog QML Type


FontDialog基本介绍

FontDialog是Qt Quick Dialogs模块提供的一个对话框组件,用于选择字体。以下是其主要属性和方法:

属性/方法类型说明
currentFontfont当前选中的字体
titlestring对话框标题
fontfont选中的字体(只读)
accepted()signal用户接受选择时触发的信号
rejected()signal用户取消选择时触发的信号
open()method打开字体对话框
close()method关闭字体对话框

字体属性

Qt中的字体对象包含以下主要属性:

属性类型说明
familystring字体族名称
pointSizereal字体大小(点数)
boldbool是否加粗
italicbool是否斜体
underlinebool是否下划线

实例演示

项目结构

qml_fontdialog/
├── CMakeLists.txt
├── main.cpp
└── Main.qml

代码实现

Main.qml
import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Basic
import QtQuick.Dialogs

ApplicationWindow {
    visible: true
    width: 800
    height: 600
    title: "文本编辑器"

    property font editorFont: Qt.font({
        family: "Arial",
        pointSize: 12
    })

    Column {
        anchors.fill: parent
        anchors.margins: 10
        spacing: 10

        ToolBar {
            width: parent.width

            Row {
                spacing: 5

                Button {
                    text: "字体"
                    onClicked: fontDialog.open()
                }

                Button {
                    text: "加粗"
                    checkable: true
                    checked: editorFont.bold
                    onClicked: editorFont.bold = checked
                }

                Button {
                    text: "斜体"
                    checkable: true
                    checked: editorFont.italic
                    onClicked: editorFont.italic = checked
                }

                Button {
                    text: "下划线"
                    checkable: true
                    checked: editorFont.underline
                    onClicked: editorFont.underline = checked
                }
            }
        }

        TextArea {
            id: textEditor
            width: parent.width
            height: parent.height - 50
            text: "在这里输入文本..."
            font: editorFont
            wrapMode: TextEdit.Wrap
        }
    }

    FontDialog {
        id: fontDialog
        title: "选择编辑器字体"
        currentFont: editorFont
        onAccepted: editorFont = selectedFont
    }
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtQuickControls2/QQuickStyle>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    
    QQmlApplicationEngine engine;
    QObject::connect(
        &engine,
        &QQmlApplicationEngine::objectCreationFailed,
        &app,
        []() { QCoreApplication::exit(-1); },
        Qt::QueuedConnection);
    engine.loadFromModule("qml_fontdialog", "Main");

    return app.exec();
}

代码解析

界面布局

  • 使用ApplicationWindow作为主窗口
  • 采用Column布局,包含工具栏和文本编辑区
  • 工具栏使用Row布局放置按钮

字体属性

  • 定义editorFont属性存储当前字体设置
  • 初始字体设置为Arial,12点大小

功能按钮

  • 字体选择按钮:打开FontDialog
  • 加粗按钮:切换字体加粗状态
  • 斜体按钮:切换字体斜体状态
  • 下划线按钮:切换字体下划线状态

字体对话框

  • 使用FontDialog组件实现字体选择
  • currentFont绑定到editorFont
  • 通过onAccepted信号更新编辑器字体

如果遇到报错:

qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/qml/FontDialogContent.qml:223:16: QML Label: The current style does not support customization of this control (property: “label” item: Label_QMLTYPE_7(0x1c2501ed580, parent=0x0, geometry=0,0 0x0 ?)). Please customize a non-native style (such as Basic, Fusion, Material, etc). For more information, see: https://doc.qt.io/qt-6/qtquickcontrols2-customize.html#customization-reference

解决方法:

在main.cpp中,添加 QQuickStyle::setStyle(“Basic”);
在CMake脚本中添加 find_package(Qt6 REQUIRED COMPONENTS Quick QuickControls2)


运行效果

FontDialog

总结

本文介绍了如何在Qt Quick应用程序中实现字体选择功能。通过使用FontDialog组件可以方便地实现字体的选择和预览。示例程序提供了基本的文本编辑功能,包括字体选择、加粗、斜体和下划线等样式设置。这些功能的实现展示了Qt Quick组件的灵活性和易用性。

项目源码下载地址:Gitcode -> QML FontDialog

Gitcode

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

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

相关文章

力扣刷题Day 27:环形链表(141)

1.题目描述 2.思路 创建一个结点集合&#xff0c;遍历链表&#xff0c;如果遇到已经加进集合的结点就说明链表有环。 3.代码&#xff08;Python3&#xff09; class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:node headnode_set set()while node…

研发效率破局之道阅读总结(3)工程优化

研发效率破局之道阅读总结(3)工程优化 Author: Once Day Date: 2025年4月22日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…

metasploit(2)生成dll木马

声明&#xff01;本文章所有的工具分享仅仅只是供大家学习交流为主&#xff0c;切勿用于非法用途&#xff0c;如有任何触犯法律的行为&#xff0c;均与本人及团队无关&#xff01;&#xff01;&#xff01; 一、dll文件基本概念 DLL 是一种包含可由多个程序同时使用的代码和数…

数据结构--并查集-高效处理连通性问题

目录 一、理论基础 &#xff08;1&#xff09;并查集的功能及实现原理 &#xff08;2&#xff09;代码模版 &#xff08;3&#xff09;模拟过程 &#xff08;4&#xff09;应用 二、基础题练习 &#xff08;1&#xff09;寻找存在的路径&#xff08;模版题&#xff09; …

WPS Office安卓版云文档同步速度与PDF转换体验测评

WPS Office安卓版是很多人常用的移动办公软件。它支持在线编辑、文档同步、格式转换等功能&#xff0c;适合手机和平板用户随时处理文档。我们用它配合谷歌浏览器打开网页文档时&#xff0c;也可以将内容快速保存到云端或转换成PDF格式使用。 先说云文档同步。在打开WPS Office…

Eureka、LoadBalance和Nacos

Eureka、LoadBalance和Nacos 一.Eureka引入1.注册中心2.CAP理论3.常见的注册中心 二.Eureka介绍1.搭建Eureka Server 注册中心2.搭建服务注册3.服务发现 三.负载均衡LoadBalance1.问题引入2.服务端负载均衡3.客户端负载均衡4.Spring Cloud LoadBalancer1).快速上手2)负载均衡策…

【Linux网络】构建基于UDP的简单聊天室系统

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

【每天一个知识点】大模型的幻觉问题

“大模型的幻觉问题”是指大语言模型&#xff08;如GPT系列、BERT衍生模型等&#xff09;在生成内容时&#xff0c;产生不符合事实或逻辑的虚假信息&#xff0c;即所谓的“幻觉”&#xff08;hallucination&#xff09;。这在诸如问答、摘要、翻译、代码生成等任务中尤其常见。…

[大模型]什么是function calling?

什么是function calling&#xff1f; 大模型的 ​​Function Calling​​&#xff08;函数调用&#xff09;是一种让大语言模型&#xff08;如 GPT、Claude 等&#xff09;与外部工具、API 或自定义函数交互的机制。 它的核心目的是让模型能够根据用户的需求&#xff0c;​​…

Java高频面试之并发编程-05

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;线程有哪些调度方法&#xff1f; 在Java中&#xff0c;线程的调用方法主要包括以下几种方式&#xff0c;每种方式适用于…

野外价值观:在真实世界的语言模型互动中发现并分析价值观

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【Linux】47.高级IO(1)

文章目录 1. 高级IO1.1 五种IO模型1.2 高级IO重要概念1.2.1 同步通信 vs 异步通信1.2.2 阻塞 vs 非阻塞 1.3非阻塞IO1.3.1 fcntl1.3.2 实现函数SetNoBlock1.3.3 轮询方式读取标准输入1.3.4 I/O多路转接之select1.3.4.1 初识select&#xff1a;1.3.4.2 select函数原型1.3.4.3 理…

notepad++技巧:查找和替换:扩展 or 正则表达式

notepad 有很多优点&#xff1a;多标签&#xff0c;代码高亮&#xff0c;我最喜欢的是查找和替换。 除了可以一次性查找所有打开文件&#xff0c;还可以使用 扩展 or 正则表达式。 例如&#xff1a; 去掉空行&#xff1a;正则表达式&#xff1a; ^\s*$\r\n ^ 表示行首。\s*…

【图像标注技巧】目标检测图像标注技巧

介绍一些图像标注技巧。之前引用过别人的文章 yolo目标检测 技巧 trick 提升模型性能&#xff0c;deep research检测调研报告也可以进行参考。 拉框类的标注&#xff0c;如果你不确定哪种方法好&#xff0c;你可以把所标注区域的都剪切出来&#xff0c;然后站在屏幕一米之外眯…

MuJoCo中的机器人状态获取

UR5e机器人xml文件模型 <mujoco model"ur5e"><compiler angle"radian" meshdir"assets" autolimits"true"/><option integrator"implicitfast"/><default><default class"ur5e">&…

测试第四课---------性能测试工具

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

【C++】新手入门指南(下)

文章目录 前言 一、引用 1.引用的概念和定义 2.引用的特性 3.引用的使用 4.const引用 5.指针和引用的关系 二、内联函数 三、nullptr 总结 前言 这篇续上篇的内容新手入门指南&#xff08;上&#xff09;&#xff0c;继续带大家学习新知识。如果你感兴趣欢迎订购本专栏。 一、…

前后端分离项目在未部署条件下如何跨设备通信

其实我此前也不知道这个问题怎么解决&#xff0c;也没有想过—因为做的项目大部分都是前后端分离的&#xff0c;前端直接用后端的部署好的环境就行了。最近也是有点心高气傲开始独立开发&#xff0c;一个人又写前端又写后端也是蛮累的&#xff0c;即使有强有力的cursor也很累很…

基于Python的多光谱遥感数据处理与分类技术实践—以农作物分类与NDVI评估为例

多光谱遥感数据包含可见光至红外波段的光谱信息&#xff0c;Python凭借其丰富的科学计算库&#xff08;如rasterio、scikit-learn、GDAL&#xff09;&#xff0c;已成为处理此类数据的核心工具。本文以Landsat-8数据为例&#xff0c;演示‌辐射校正→特征提取→监督分类→精度评…

vscode python 代码无法函数跳转的问题

TL; DR; python.languageServer 配置成了 None 导致 vscode python 代码无法函数跳转 详细信息 mac 环境下 vscode 正常 command 鼠标左键 可以跳转到定义或者使用位置&#xff0c;但是我的为何不知道失效了 我一开始以为是热键冲突&#xff0c;结果发现 mac 好像没办法定…