当前位置: 首页 > ai >正文

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

目录

    • 引言
    • 相关阅读
      • 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.DialogsApplicationWindow {visible: truewidth: 800height: 600title: "文本编辑器"property font editorFont: Qt.font({family: "Arial",pointSize: 12})Column {anchors.fill: parentanchors.margins: 10spacing: 10ToolBar {width: parent.widthRow {spacing: 5Button {text: "字体"onClicked: fontDialog.open()}Button {text: "加粗"checkable: truechecked: editorFont.boldonClicked: editorFont.bold = checked}Button {text: "斜体"checkable: truechecked: editorFont.italiconClicked: editorFont.italic = checked}Button {text: "下划线"checkable: truechecked: editorFont.underlineonClicked: editorFont.underline = checked}}}TextArea {id: textEditorwidth: parent.widthheight: parent.height - 50text: "在这里输入文本..."font: editorFontwrapMode: TextEdit.Wrap}}FontDialog {id: fontDialogtitle: "选择编辑器字体"currentFont: editorFontonAccepted: 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.xdnf.cn/news/1180.html

相关文章:

  • 【重走C++学习之路】16、AVL树
  • Java练习——day3
  • qemu如何支持vmovdqa64指令(百度AI)
  • 游戏工作室为何要更换IP进行多开?工作室使用代理IP要注意什么?
  • 35.编写一个简单的Mybatis插件
  • ​​电商系统用户需求报告(示例)
  • 随着ai技术的应用,及玩具类产品的层出不穷,开发此类产品的情感AI算法技术的底层构架,及情感AI算法的应用场景是转型的比较好的一个方向
  • HTTP状态码有哪些常见的类型?
  • 三网通电玩城平台系统结构与源码工程详解(四):子游戏集成与服务器调度机制全解
  • Spring AOP + Logback + MDC全链路日志追踪
  • 三线服务器通常适用于哪些用户?
  • GPIO(通用输入输出端口)详细介绍
  • 【T2I】TOKENCOMPOSE: Text-to-Image Diffusion with Token-level Supervision
  • 【2025最新面试Java八股】Java虚拟线程怎么回事,是协程吗?
  • 解决开启代理时无法正常使用Microsoft Store, OneDrive, Outlook等应用的问题
  • 构建“穿戴+云端”落水应急响应体系,为海上作业人员打造全天候、全场景的安全守护网
  • 三网通电玩城平台系统结构与源码工程详解(三):控制台与银商权限模块设计
  • 互联网大厂Java面试:从基础到进阶的技术点探讨
  • 108. 将有序数组转换为二叉搜索树
  • Python——入门... ...
  • 突破 RAG 检索瓶颈:Trae+MCP 构建高精度知识库检索系统实践
  • 嘻游组件解密工具实战教程:资源解包与UI替换全流程
  • 一目十行阅读法
  • 航电系统自适应与容错机制要点
  • Git ——提交至github,Vercel拉取,更新不了项目的问题解决
  • LOH 怎么进行深度标准化?
  • (15)VTK C++开发示例 --- 生成随机数的首选方法
  • 【读论文】HM-RAG:分层多智能体多模态检索增强生成
  • Spring Boot多环境配置详解
  • 通俗的理解TCP的三次握手四次挥手