QT C++类与QML交互

这篇具有很好参考价值的文章主要介绍了QT C++类与QML交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、准备工作

C++方负责数据,QML负责显示,先准备工作如下:
(1)新建一个数据类,继承至QObject
class Cdata : public QObject
(2)将有交互关系的数据,加入到类的私有成员中
private:
int iNum;
QString strEdit;
(3)给此成员Q_PROPERTY和相应的函数实现(ALT+回车可自动创建)
Q_PROPERTY(int iNum READ getINum WRITE setINum NOTIFY iNumChanged)
setINum中要有emit iNumChanged();
Q_PROPERTY(QString strEdit READ getStrEdit WRITE setStrEdit NOTIFY strEditChanged)
函数实现:
int Cdata::getINum() const
{
return iNum;
}

void Cdata::setINum(int newINum)
{
if (iNum == newINum)
return;
iNum = newINum;
emit iNumChanged();
}

2、C++数据变化,QML控件显示变化后的数据

例如:现在在Cdata中,新建一个定时器,每秒iNum数据+1;QML中有个按钮,按钮的显示值是iNum的值。现在要求QML上按钮的值随iNum每秒更新。
(1)main.c中注册此数据类到QML。
qmlRegisterType(“CData”,1,0,“CdataS”);
(2)QML中引入此类
import CData 1.0
CdataS{
id:cdatas
}
(3)将按钮的显示值设置成iNum
Button{
text:cdatas.iNum
}
(4)重点:在Cdata的定时器槽函数中,iNum变化后,发送一个值改变的信号,QML中由于绑定,iNum的值将更新在按钮显示上。
void Cdata::update()
{
iNum++;
emit iNumChanged();
}

3、QML控件被操作,C++端数据接收操作后的值

例如:在QML中,有一个编辑控件,当改变控件输入的值,在C++数据收到改变后的值,不使用信号槽绑定操作

3.1 在QML中调用属性的set方法

(1)setStrEdit函数加Q_INVOKABLE 宏
Q_INVOKABLE void setStrEdit(const QString &newStrEdit);
(2)控件属性变化时,调用set方法
TextEdit{
id:textedit
text:cdatas.strEdit
onTextChanged: {
cdatas.setStrEdit(textedit.text);
}
}
}

3.2 在QML中直接赋值

(1)setStrEdit函数加Q_INVOKABLE 宏
Q_INVOKABLE void setStrEdit(const QString &newStrEdit);
(2)控件属性变化时,直接赋值
TextEdit{
id:textedit
text:cdatas.strEdit
onTextChanged: {
cdatas.strEdit = textedit.text;
}
}
}文章来源地址https://www.toymoban.com/news/detail-764822.html

到了这里,关于QT C++类与QML交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角

    在探讨 Qt 的世界时,我们不仅是在讨论一种编程框架,更是在探索一种将复杂技术细节隐藏于幕后、让开发者专注于创造性工作的艺术形式。正如著名的计算机科学家 Edsger Dijkstra 所言:“简洁是复杂性的先决条件。” 在这一章节中,我们将探讨 Qt 事件机制的基础概念,这

    2024年02月22日
    浏览(47)
  • 98.qt qml-使用曲线图综合示例、支持多种鼠标交互、支持百万数据显示(已适配黑白风格)

    在上章我们只是简单实现了曲线图和折线图的显示: 79.qt qml-如何在QML中使用QCustomPlot之曲线/折线示例(已适配黑白风格)_qml 折线图_诺谦的博客-CSDN博客 所以本章实现综合示例、并添加多种功能如下所示: 详细显示:鼠标任意移动显示具体值内容 鼠标右击: 弹出菜单栏,支持

    2024年02月05日
    浏览(54)
  • QML学习十三:QML与C++交互之C++端发送信号绑定QML端

    若该文为原创文章,转载请注明原文出处 本篇记录下C++端发送的信号是如何绑定QML端的,通过学习,对QML端发送信号绑定C++端有所了解,绑定的方式有三个,项目实际使用的是connect,这个也是我在项目中最常用到的。 那C++端发送的一个信号,在QML如何绑定并接收处理呢? 注

    2023年04月08日
    浏览(31)
  • Qt6 Qt Quick UI原型学习QML第七篇

    导入 QtQuick 2.12 导入 QtQuick.Window 2.12 导入 QtQuick.Controls 2.12 导入 QtQuick.Layouts 1.3 导入 Qt.labs.calendar 1.0 矩形 { id: root 属性 int duration: 3000 } 这段代码使用了QtQuick库来创建一个用户界面。其中的Rectangle是界面的根元素。 id: root : 为Rectangle元素指定唯一的标识符root。 property int durat

    2024年02月16日
    浏览(33)
  • Qt6 Qt Quick UI原型学习QML第二篇

    元素可以分为 视觉元素和非视觉元素 。视觉元素(如Rectangle)具有几何形状,并且通常在屏幕上呈现一个区域。非可视元素(如Timer)提供一般功能,通常用于操作可视元素。 目前,我们将关注基本的视觉元素,例如 Item, Rectangle, Text, Image和MouseArea 。但是,通过使用Qt Quick Contro

    2024年02月16日
    浏览(31)
  • Qt6 Qt Quick UI原型学习QML第三篇

    图像 Image(图片)元素 解释 这段代码是使用QtQuick 2.0库来创建一个Image(图片)元素的定义。以下是代码的解释: Image 元素是一个用于显示图像的控件。 id: root 是为Image元素指定了一个标识符,以便在代码中引用它。 signal clicked 定义了一个名为 clicked 的信号。信号用于在特

    2024年02月16日
    浏览(42)
  • Qt6 Qt Quick UI原型学习QML第六篇

    import QtQuick 2.12 :导入QtQuick模块的版本2.12,用于创建Qt快速应用程序的用户界面。 import QtQuick.Window 2.12 :导入QtQuick.Window模块的版本2.12,用于创建窗口对象。 import QtQuick.Controls 2.12 :导入QtQuick.Controls模块的版本2.12,用于创建用户界面控件。 Window {} :定义了一个窗口对象,

    2024年02月16日
    浏览(41)
  • Qt6 Qt Quick UI Prototype学习QML第一篇

    创建一个具有QML入口点的Qt Quick 2 UI项目。要使用它,您需要设置一个QML运行时环境,例如gmlscene。 仅当您正在进行原型设计时才使用此功能。您无法使用此创建完整的应用程序。请考虑使用Qt Quick application项目 Qt Quick UI原型主要用于快速创建交互式的用户界面(UI)原型。它

    2024年02月16日
    浏览(43)
  • 【QT】C++和QML使用多线程优化界面切换卡顿的方法

    qt提供了一种声明式语言qml,可以使用一些可视组件以及这些组件之间的交互来描述用户界面,而c++可以只负责后台逻辑的处理,将界面和后台分离开来,由qml来做UI界面,c++负责后端处理,对我个人来说,这样的方式大大的方便了对界面和逻辑的修改和维护; 由于UI界面是工

    2024年01月19日
    浏览(35)
  • Qt/QML编程学习之心得:slider(34)

    滑条slider,有时也成为进度条progressbar,在GUI界面中也是经常用到的。 position属性表示为控件大小的一小部分,范围在0.0到1.0之间。visualPosition属性是相同的,只是在从右到左的应用程序中颠倒了它。在设置“滑块”样式时,visualPosition可用于定位控制柄。visualPosition在从左到

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包