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

Qt QML 模块及其函数详解

Qt CoreQt Widgets 不同,QML 是一种声明式语言,主要关注 UI 的外观和行为,而不是传统的 C++ 代码流。因此,在 Qt QML 模块中,我们讨论的“函数”分为两个主要部分:

  1. C++ 端的核心类和函数: 这些函数负责加载、执行 QML 代码并实现 C++ 和 QML 之间的通信。
  2. QML 语言内部的函数和方法: 这些是 QML 元素本身提供的方法(Methods)和 JavaScript 函数。

🌟 I. C++ 端:Qt Qml 模块的核心类和函数

这些类属于 <QtQml> 模块,是 QML 引擎在 C++ 端的工作基础。

核心类 (Class)功能描述常用函数 (Function) 及作用
QQmlEngineQML 执行环境的核心。 管理组件缓存、网络访问、以及 QML 脚本的执行。QQmlEngine::load(const QUrl &url): 加载 QML 文件并创建根组件。返回 QObject 指针。
QQmlEngine::rootContext(): 返回 QQmlContext 对象,用于在 C++ 中设置全局变量供 QML 访问。
QQmlEngine::trimComponentCache(): 清理已加载的组件缓存,释放内存。
QQmlComponentQML 组件的封装。 用于将 QML 文件编译成可实例化的对象。QQmlComponent::create(): 实例化已加载的 QML 组件,返回 QObject 指针。
QQmlComponent::loadUrl(): 异步加载 QML 源文件。
QQmlContextQML 上下文环境。 用于将 C++ 数据模型、对象和值暴露给 QML。QQmlContext::setContextProperty(const QString &name, QObject *value): 将 C++ 对象(或 QVariant)暴露给 QML,QML 中可通过 name 访问。
QQmlContext::parentContext(): 获取父级上下文。
QQmlApplicationEngineQt Quick 应用程序的入口。 继承自 QQmlEngine,并简化了主 QML 文件的加载。QQmlApplicationEngine::load(const QUrl &url): 简化加载 QML 文件为应用程序的根组件,自动设置上下文。
QQuickView在 C++ 窗口中显示 QML 场景。 (属于 Qt Quick 模块,但与 QML 引擎紧密相关)。QQuickView::setSource(const QUrl &url): 设置要显示的 QML 文件路径。
QQuickView::show(): 显示包含 QML 场景的窗口。

🚀 II. QML 语言内部的函数和方法 (QML Methods)

在 QML 内部,“函数”通常是特定 QML 元素提供的 方法 (Methods),或是 QML 中直接编写的 JavaScript 函数

A. 基础元素方法 (Qt Quick Module)

这些方法是 QML 的基石,用于控制 UI 元素的行为。

QML 元素核心方法 (Method)作用描述
ItemItem::x, Item::y: 属性,设置位置。
Item::width, Item::height: 属性,设置大小。
Item::parent: 属性,访问父元素。
StateState::changes: 属性,定义在进入此状态时属性如何变化。
State::onEntry / onExit: JavaScript 块,在进入/退出状态时执行代码。
ComponentComponent::createObject(parent, properties): 动态创建组件实例的方法。
MouseArea信号 clicked(): 鼠标点击时发射。
MouseArea::contains(point): 检查给定点是否在区域内。
TimerTimer::start() / stop(): 启动和停止定时器。
信号 triggered(): 定时器到期时发射。

B. 高级功能模块方法 (Qt Quick Controls, etc.)

QML 元素核心方法 (Method)作用描述
LoaderLoader::setSource(url): 运行时动态加载另一个 QML 文件。
Loader::item: 属性,访问加载的组件实例(QObject*)。
ListView / GridViewListView::positionViewAt(index, mode): 滚动视图,将指定索引的项定位到特定位置。
ListView::positionViewToBeginning(): 滚动到列表开头。
StackViewStackView::push(url): 将新页面推入栈顶,通常伴随动画。
StackView::pop(): 弹出栈顶页面,返回到上一个页面。
Connectionson<SignalName>: 专用槽,用于连接到非父子关系对象的信号。

C. JavaScript 内建函数和 QML 全局函数

在 QML 的属性绑定或信号处理块中,可以直接使用标准 JavaScript 函数或 QML 提供的全局函数。

函数名描述作用
qsTr(string)翻译函数。 用于标记字符串进行翻译(使用 Qt Linguist)。text: qsTr("Hello")
console.log()调试输出。 在 C++ 端输出调试信息(等同于 qDebug())。onClicked: console.log("Button clicked")
Date()JavaScript 内建。 用于创建和操作日期/时间对象。var d = new Date()
Math.random() / Math.round()JavaScript 内建。 用于数学计算。N/A

💡 总结:QML 编程的核心模式

QML 模块中的“函数”重点在于实现 C++ 和 QML 之间的桥梁以及 QML 内部的交互逻辑

  1. C++ 调用 QML: C++ 使用 QQmlEngine 加载 QML 文件,然后通过 QObject::findChild() 获取 QML 对象,并调用其方法。
  2. QML 调用 C++: C++ 通过 QQmlContext::setContextProperty() 将 C++ 对象暴露给 QML,QML 直接调用该 C++ 对象的公共槽函数或方法。
  3. QML 内部交互: QML 元素之间通过属性绑定、状态机和信号/槽机制进行通信,核心逻辑常在 onClicked 等信号处理块中以 JavaScript 函数的形式实现。
http://www.dtcms.com/a/614970.html

相关文章:

  • 2019年JCP SCI1区TOP,改进蚁群算法+多车场多目标绿色车辆路径规划,深度解析+性能实测
  • 宜兴建设局 审图中心 网站怎么建立自己的网站视频网站
  • 网站开发与设计中学生有哪些企业公司
  • 专门做尾单的那个网站叫啥一键wordpress 伪静态
  • 成都网站维护公司网站开发大数据库
  • 招聘网站排行榜烟台市建设工程检测站网站
  • 通用会话控制方案
  • 深度学习:Adam 优化器实战(Adam Optimizer)
  • 建个网站需要多少钱网站备份查询
  • NetApp FAS8200 控制器启动报错-PCIe device missing
  • 找个人做网站的做的好的音乐网站的特点
  • 网站设计的简称河南中国建设厅官方网站
  • 唐山自助建站福州如何做百度的网站推广
  • 政务网站建设建议湖南广告优化
  • 网站建设排名北京郑州市主城区
  • 做网站为什么要建站点海口网站制作设计
  • 淄博市住房和城乡建设局网站怎样在潇湘书院网站做兼职
  • STL容器
  • 北京网站建设企业网站制作益阳seo网站建设
  • 天猫网站建设目的小学最好的网站建设
  • JavaWeb(前端实战)
  • 新网站多久收录内页4399任天堂
  • 买网站做网站设计怎么学
  • Qt Core 模块中的函数详解
  • 网站备案检验单网站搭建免费
  • 设置网站模板免费的app软件下载安装
  • 滁州 来安县建设局网站建设局是做什么的
  • 异常的介绍
  • [LivePortrait] LivePortraitPipeline
  • 织梦wap网站模版wordpress的注册文件在哪儿