Qt C++中引用 qml文件

QML: C++调用QML函数 这里有两个常用的宏:Q_RETURN_ARG,Q_ARG,从字面意思就可以看出来,一个是用来获取返回值,另一个用于传参。2) 通过设置objectName,利用findChild()找到对应的对象;1) 从qml端直接传QOBject * 到C++端; 阅读详情

Qt C++中引用 qml文件

习惯了Qt gui C++ 编程的人,都会觉得QWidget真是一个很方便的东西。现阶段,qml已经很流行了,qml也有其很多特有的亮点,如炫酷的动画效果,简洁快速的页面编程。那么,作为一个传统的gui C++ 玩家,该如何引入qml呢?下面简单说明一种方法。

通过 QQuickWidget 引用qml文件

QQuickWidget 的详细描述请参考qt助手中的描述。

使用步骤

1. .pro文件中加入模块 quick 和 quickwidgets

QT       += quick
QT       += quickwidgets

2. 实例化QQuickWidget后,调用QQuickWidget的setSource()函数,设置qml源文件。

 QQuickWidget *wid = new QQuickWidget(this);
 wid->setSource(QUrl(QStringLiteral("qrc:/qml/ClickCount.qml"))); //注意路径

(这里踩了一个坑:记得要先创建资源文件,并且在资源文件中添加qml文件,否则最后运行的时候,老是报错:找不到qml文件。类似如下:)
在这里插入图片描述

3.就可以显示qml的内容、读取、设置qml的属性啦。

例子:
widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

private slots:
    void clearCount(int count);
    void textChange(QString str);

signals:
    void testSignal(QString);
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QQuickWidget>
#include <QQuickItem>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //使用QQuickWidget调用qml
    QQuickWidget *wid = new QQuickWidget(this);
    wid->setSource(QUrl(QStringLiteral("qrc:/qml/ClickCount.qml")));
    wid->setResizeMode(QQuickWidget::SizeRootObjectToView);
    wid->show();

    //获取qml根元素
    QQuickItem *item = wid->rootObject();

    //读取qml的属性
    qDebug()<<item->property("count").toInt();
    qDebug()<<item->property("showText").toString();

    //设置qml属性
    item->setProperty("count", 100);

    //修改qml中根元素的子元素的属性
    QObject *objTitle = item->findChild<QObject *>("title");    //利用元素的objectName来查找
    if(objTitle)
    {
        objTitle->setProperty("text", "标题已修改");
    }

    //连接qml的信号
    connect(item, SIGNAL(clearCount(int)), this, SLOT(clearCount(int)));
    connect(item, SIGNAL(textChange(QString)), this, SLOT(textChange(QString)));

}

Widget::~Widget()
{
    delete ui;
}

void Widget::clearCount(int count)
{
    qDebug()<<"clearCount: "<<count;
}

void Widget::textChange(QString str)
{
    qDebug()<<"textChange: "<<str;
}

ClickCount.qml

import QtQuick 2.0

Item {
    id: root
    objectName: "clickCount"
    width: 400; height: 400

    property int  count: 0
    property string showText: txt.text

    signal textChange(string str)
    signal clearCount(int c)

    Rectangle {
        anchors.fill: parent
        color: "darkgrey"

        //清空次数按钮
        Rectangle {
            width: 100; height: 30
            x:0; y:0
            border.color: "black"
            border.width: 1

            Text {
                text: "次数清零"
                anchors.centerIn: parent
            }
            MouseArea {
                anchors.fill: parent
                onClicked: {
                    root.count = 0
                    root.clearCount(root.count)
                }
            }
        }

        //标题
        Text {
            id: title
            objectName: "title"
            text: "点击计数器"
            anchors.horizontalCenter: parent.horizontalCenter
            anchors.top: parent.top
            anchors.topMargin: 20
        }

        //计数显示
        Rectangle {
            width: 200
            height: 200
            anchors.centerIn: parent
            color: "darkseagreen"
            Text {
                id: txt
                text: "点击次数" + count
                anchors.centerIn: parent
            }
            MouseArea {
                anchors.fill: parent
                onClicked: {
                    count += 1
                    root.textChange(txt.text)
                }
            }

        }

    }
}

运行效果图:
在这里插入图片描述

QML之使用Loader加载QML组件 QML的Loader元素经常备用来动态加载QML组件。这个元素最有用的地方是它能在qml组件需要的时候再创建,即延迟创建QML的时间。那么main.qml和Page2.qml都会接收到按键事件,也就是说按键事件会传播到main.qml中。四、加载与被加载组件中都有相同的事件,那么需要设置Loader的属性focus为true,且设置被加载组件 focus: true才能让事件不被传播到被加载组件。使用Connections元素可以接收到任何发送自加载组件的信号。三、接收来自加载的qml发出的信号。 阅读详情

相关推荐

QML C++插件dll引用

如果不指定,在Qt安装文件D:\ProgramFiles\Qt\Qt580\5.8\mingw53_32\qml目录新建文件夹MyPlugin,把QMLCPPPlugin.dll ,QMLCPPPlugind.dll和qmldir复制到MyPlugin文件夹内。在应用程序新建文件夹DLL(DLL文件夹和QMLCPPPluginApp.pro同级目录),在DLL新建文件夹MyPlugin(此MyPlugin是qmldir文件中module).插件的创建非常简单,但是它可以复用,并且为不同的应用程序扩展类型。

QtCompany的博客 346

用 C++ 编写 QML 扩展

Qt QML 模块提供了一组 API,用于通过 C++ 扩展扩展 QML。可以编写扩展来添加 QML 类型、扩展现有的 Qt 类型或调用无法从普通 QML 代码访问的 C/C++ 函数。在本教程中,将展示如何使用 Qt Quick 模块中的 C++ 类来扩展 QML。最终结果将是一个简单的饼图显示,由多个自定义 QML 类型通过 QML 功能(如绑定和信号)连接在一起实现,并通过插件提供给 QML 运行时。

hw5230的博客 355

QT--C++和QML交互(二)

QT–C++和QML交互(一)的例子中在main.qml中加载的c++类模块,相当于一个局部变量,每到此qml时执行一次初始化。 要想把c++定义的类当做全局变量使用,可在main.cpp中new个类,然后定义上下文属性,之后直接在qml中调用名字就行了。如下 下面展示一些 内联代码片。 // 定义全局变量 Parameter *p_parameter = new Parameter(); //可更改属性值 Parameter中定义的 Q_PROPERTY(QString value .

weixin_44820280的博客 876

Qt中的cpp文件如何在QML界面中使用

Qt中的cpp文件如何在QML界面中使用: 一、在main.cpp中注册: qmlRegisterType(“an.qt.ColorMaker”,1,0,“ColorMaker”); :指cpp文件 “ColorMaker”:是在qml中的类名 an.qt.ColorMaker,1,0:在qml中一般引用方法:import an.qt.ColorMaker 1.0,这个名称可以随便命名,根据自己喜好。 二、在qml中引用 三、在qml中创建类的对象,然后调用他的接口,即可执行cpp中的方法为qml提供服务。

hmwz0001的博客 966

Qt/QML编程之路:一个.qml文件调用另一个.qml文件(17)

比如有个main.qml和mainWidget.qml,mainWidget.qml为整个main.qml的一部分,且占满整个界面,或者说ApplicationWindow啥也没干,是个“虚”的窗口,就是把主界面MainWidget装在了进来,所有的界面组件都在MainWidget这个.qml中定义。在下面的示例中,comp1是在MyItem.qml的根上下文中创建的,从该组件实例化的任何对象都可以访问该上下文中的id和属性,如internalSettings.color。Component(组件)

码农17年的博客 4680

QML 使用资源系统

Qt 资源系统,允许将资源文件作为二进制文件存储在可执行文件中,这在构建混合的 QML/C++ 应用程序时非常有用。

青春不老,奋斗不止! 9806

qml图片相对路径linux,qml添加的图片路径

转载地址:http://blog.youkuaiyun.com/lynfam/article/details/7078540QML 的一些小内容:1. 应用qrc资源中的QML文件下面这段代码是不会正常工作的,QmlApplicationViewerviewer;viewer.setMainQmlFile(QLatin1String(":qml/main.qml"));因为在 QmlApplicationV...

weixin_39611072的博客 720

c++与qml的交互数据传递及其实时刷新

将temp绑定信号tempParaChanged();在temp值改变的时候,发出这个绑定的信号,就可以实现参数的更新。这样只要通过绑定信号,我们就可以在任何时候更新我们想要更新的参数,而不需要重新赋值。将Text的文本绑定c++的参数temp,在c++端的test.cpp文件中。每次调用paraUpdate()函数时都会更新text文本的值。1.写一个继承于QObject的类,并注册。2.qml端导入,并实例化。

qq_59578055的博客 2885

QML 怎么调用 C++ 中的内容?

很简单,我们可以在 C ++ 文件中通过 QML 引擎(QQmlEngine class)的上下文对象(QQmlContext)调用方法 setContextProperty 设置对应的引用即可。可以看到,既可以设置 QObject 类型的对象(指针),也可以设置 QVariant 兼容的类型数据(包括基本类型数据等)到 QML 引擎的上下文中。上面是设置数据,这里设置的是 QObject 类型的指针,所以在 QML 里还可以调用 C ++ 文件中定义的对象,包括属性和方法等。开发环境:Qt5.12。

hw5230的博客 536

【各种轮子2】基于Icepak的PCB散热仿真比较

随着电子产品的集成度越来越高,PCB板的尺寸越来越小,板级芯片散热的问题越来越成为电子工程师的一个重要挑战。对于板级芯片散热,主要依靠工程师对PCB自身的设计进行优化,同时要兼顾系统的尺寸和成本。本文分别从芯片角度和PCB角度进行建模,芯片模型选用QFN封装,PCB模型采用走线导入模型,探讨了芯片结构,PCB铜厚,PCB叠层厚度对芯片散热的影响。

3668

无感FOC之高频注入法——永磁同步电机控制

1.摘要电机运行在低速或零速时,磁链产生的反电动势很微弱,可用信号的信噪比太低,因而难以从反电动势中提取转子的位置和速度信息。因而在电机处于低速或零速时,需要借助电机的凸极特性来获取转子的位置信息。内置式永磁同步电机或磁密较大的表贴式永磁同步电机具有这种凸极特性,可借助高频电压注入法获取转子位置。2.凸极特性凸极电机内部的气隙是不均匀的,d轴和q轴的有效气隙是不同的,通俗来说在凸极电机里,q轴电感往往大于d轴电感,而在大部分表贴式永磁同步电机,气隙分布相对均匀,q轴电感近似于d轴电感。凸极率常用q轴电感和d

qq_2545470942的博客 2万+

Qt Design Studio在QML项目中的使用

3、将Qt Design Studio创建项目的文件添加到Qt create创建的项目中。此时,在Qt Design Studio中进行UI的修改后,Qt create可直接使用。为item则将其修改为windows,并将visible设置为true。2、将Qt create创建项目时自动生成的main.qml删除。Qt Design Studio创建项目。Qt create5.15.2创建项目。5、查看qmldir中是否添加模块。7、将item转为windows。4、修改main.cpp。

ma0216的博客 1451

保姆级教程:用STM8S207R6和FD6288T自制BLDC驱动板,从原理图到代码框架搭建

本文提供了一份详细的STM8S207R6和FD6288T自制BLDC驱动板教程,涵盖从原理图设计到代码框架搭建的全过程。通过硬件选型、电源电路设计、PWM定时器配置等关键步骤解析,帮助开发者快速掌握无刷直流电机驱动技术,实现高效稳定的电机控制方案。

weixin_28729205的博客 487

QT QML Lesson2:使用QtCreator创建QML Plugin

QT QML Lesson2:使用QtCreator创建QML Plugin 目的 以插件的方式提供C++封装 主要内容 创建一人个插件项目 明白.pro中,编译文件输出的控制 明白插件的命名空间、UML引用名称、C++类名 明白QML如何使用插件 项目源码 https://gitee.com/lxmuyu/QML_Lesson.git...

lxmuyu的专栏 636

高通SA8295P音频接口深度解析:全面掌握SA8295P的LS-I2S、PCM/TDM与高性能音频处理技术设计

SA8295P提供丰富的音频接口选项,包括LS-I2S、PCM/TDM和HS-I2S接口,具备灵活的配置选项,适合各种高保真音频和高速数据传输应用。结合LS-I2S和PCM/TDM接口:在复杂的音频编解码器设计中,可结合使用LS-I2S和PCM/TDM接口,以处理和传输不同的音频数据流。使用HS-I2S接口:在软件定义无线电(SDR)系统中,高速I2S接口可处理高速数据流,如无线电信号的解码和处理。LS-I2S(低速I2S)接口是SA8295P的一部分,提供了丰富的音频数据传输选项。

weixin_43199439的博客 1403

[漏洞挖掘与防护] 03.漏洞利用之WinRAR安全缺陷复现(CVE-2018-20250)及软件自启动分析

上一篇文章将详细介绍MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程,它是Windows Server服务RPC请求缓冲区溢出漏洞,利用445端口,并通过Metasploit工具获取shell及进行深入的操作。这篇文章将详细讲解WinRAR漏洞(CVE-2018-20250),并复现了该漏洞和讲解了恶意软件自启动劫持原理。基础性文章,希望对入门的同学有帮助。

杨秀璋的专栏 1088

QML插件的创建及调用

1、可以将qml文件放在qmldir中进行声明。大家可以看下QT提供的qml文件,也是这样放置的。此种方式需要将qml文件和qmldir放在一起。比如qml是存放各种插件的,其中有个插件叫。2、在main.qml导入module。那一行的名字,版本是由QT默认生成的。此种方式只需要携带qmldir即可。1、在main函数添加导入路径。路径需要是qml文件上两层目录。将qml这层的路径添加即可。module是qmldir的。那么qml必须有个文件夹是。

DefiniteGoal的博客 1118

28、数字电路测试与半导体内存测试全解析

本文全面解析了数字电路中的顺序电路测试生成方法与半导体内存测试技术。内容涵盖顺序电路中的故障检测、多重观察测试、可驱动性分析、伪组合电路测试及初始化问题,并深入探讨了内存技术发展、故障模型、测试流程与未来趋势。重点介绍了DRAM、SRAM等主流内存类型的特点,以及制造和使用过程中面临的永久性与非永久性故障挑战,提出了基于故障模型的高效测试策略与优化方案。

go5gopher的博客 122

在QML中使用C++枚举类型,解决undefined问题

如果用户尝试实例化此类,将记录一个警告: qrc:/main.qml:16 Not creatable as it is an enum type.然后,有时人们不小心将 ENUM 与上下文属性而不是类名一起使用。如果在 QML 中也使用相同的类作为上下文属性……2.使用 QML 引擎将类注册为“不可创建类型”ENUM 应该通过使用类名引用它来使用。ENUM 应该通过使用类名引用它来使用。1.C++ 中创建 ENUM 类型。可以防止在 QML 中实例化。3.在QML文件中使用ENUM。

383

Android AVB 分析(十三)dm-verity 设备是如何映射的?

在上一篇《Android AVB 分析(十二)嵌入式设备安全中的 dm-verity 简介》介绍 dm-verity 原理的时候,作者提供了一个 dm-verity 演示的例子。本篇我们基于 AOSP 源码 `android-13.0.0_r41` 实际编译生成的 Google Pixel 7 (“panther”) 设备的 system 分区镜像进行 dm-verity 设备验证实战。

洛奇看世界 2438

美军利用MANET技术实现无人作战单元协同作战

本文首先介绍了移动自组织网络 (MANET)以及Wave Relay®波形中继技术,并探讨了波形中继MANET平台在美空军ABMS项目等军事方面的运用情况。

guanyifu9的博客 850

Qt Quick of C++ : import(qml)

QtQuick6.6.3import,使用qml

ymc99999chn的博客 313

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【qml-4】qml与c++交互(类型多例)

之前提到的实例方式,是在c++中实例化再注入qml,手册中是不推荐这么做的。而之前提到的类型方式,用起来也不是我想要的“简洁”效果,实际项目中我用了一种自认为比较方便的用法,记录下来。就三步,不需要改qmakelists.txt,不需要涉及路径,我认为已经非常简练。

大橘子的博客 526

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

qml中使用c++中定义的枚举类型(enum)的方法

定义一个直接或间接继承自QObject的类; 在该类中定义一个enum类型; 用宏ENUM()声明该enum类型; class ClassA: public QObject { Q_OBJECT public: enum EnumA{ ValueA, ... }; Q_ENUM(EnumA) } 在main函数中将该类注册到qml环境中; qmlRegisterType<ClassA>("MyLib", 1, 0, "Class.

qq_43248127的博客 3569

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: ubuntu 18.04 qt 使用mysql 数据库
下一篇: Qt窗口设置Z方向的层叠顺序
不是很大锅
博客等级 码龄10年 34粉丝 44原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是很大锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值