qml与c++混合编程之简单demo说明

QML 树控件TreeView默认展开所有节点的方法和实现 背景 近来在做Qt界面设计相关的项目,由于主窗体的框架是用QtQuick搭建的,所以必须从传统的C++开发转向JS风格的QML开发,QML我理解他的话就是一个JavaScript风格的描述性说明语言,至于QtQuick则相当于Qt官方为qml开发提供的一个通用强大的组件库吧,QML与QtQuick的关系相当于C++与STL吧。扯远了,说白了就是在项目的开发过程中,需要构建一个提供导航功能的流程树,其所有节点默认是展开的,点击打开其子节点对应的界面。 树控件TreeView... 阅读详情

最近接触QML,感觉非常kuo,demo中实现一个按键,名为Open,功能就是打开文件,很简单。打开过程是c++干事,界面是QML写的。

qml与c++混合编程不清楚的,可以看我前面一篇文档。

file.h

#ifndef FILE_H
#define FILE_H
#include <QObject>
class test_file: public QObject
{
    Q_OBJECT
public:
    explicit test_file(QObject *parent = 0);
signals:
    void someSignal();
public slots:
    void on_actionOpen_triggered(); // 打开文件菜单

};

#endif // FILE_H
on_actionOpen_triggered();是槽函数,还得有个signals函数;

file.cpp

#include "file.h"
#include "QDebug"
#include <QtWidgets/QFileDialog>
test_file::test_file(QObject *parent):
    QObject(parent)
{
}

void test_file::on_actionOpen_triggered()// 打开文件菜单
{
    QString fileName = QFileDialog::getOpenFileName(); // 获取文件路径
    emit someSignal();
    qDebug()<<fileName;
}

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QQmlEngine>
#include <QtQml>
#include "file.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QQmlApplicationEngine engine;
    test_file f;
    engine.load(QUrl(QStringLiteral("qrc:/edit/main.qml")));
    engine.load(QUrl(QStringLiteral("qrc:/edit/Buttons.qml")));
    engine.rootContext()->setContextProperty("FILE_USER",&f);

    return a.exec();
}

main.qml

import QtQuick 2.0
import QtQuick.Controls 1.1

ApplicationWindow {
    id: aw
    visible: true
    width: 900
    height: 900
    title: qsTr("edit")
Rectangle {
    width: 600
    height: 600
    color: "#609ca0"
    Rectangle{//按钮
        x:50;y:40
        Buttons{
            anchors.horizontalCenter: parent.horizontalCenter
            text: "Open"
             onClick.onClicked:FILE_USER.on_actionOpen_triggered()
        }
    }
  }
}

Buttons.qml

import QtQuick 2.0
Rectangle {
    id:button_type
    property alias onClick:ma
    property alias text: textElement.text;

    width: 90; height: 40
    border.color: "steelblue";border.width:2
    radius: 8

    Text {
        id: textElement
        anchors.centerIn: parent
        font.pointSize: 25
        style: Text.Raised; 
    }
    MouseArea{
        id: ma
        anchors.fill: parent
	}
}

运行结果如下:


点击Open的时候,弹出如下弹框选择:


Qt面试核心考察方向与实战技巧解析 Qt作为跨平台C++框架的核心竞争力在于其元对象系统和信号槽机制,这些特性通过moc预处理器实现运行时反射能力。在GUI开发领域,QGraphicsView框架采用场景图(Scene Graph)架构,通过二进制空间分区树(BSP Tree)优化碰撞检测性能。多线程编程实践中,Qt提供了QThread、QtConcurrent等多种方案,需特别注意线程安全与对象亲和性。模型/视图(Model/View)框架通过代理模型实现数据过滤排序,配合懒加载机制处理大数据集。工程实践中,插件系统设计需遵循Qt插件接口规 阅读详情

相关推荐

C++与QML混合编程

Qt Quick技术的引入,使得我们能够快速构建流畅的用户界面,具有动画、各种绚丽效果的UI都不在话下。但它不是万能的,也有很多局限性,原来Qt的一些技术,比如低阶的网络编程如QTcpSocket、多线程,又如XML文档处理类库QXmlStreamReader、QXmlStreamWriter,再如文件操作QFile、QTextStream等,在QML中要么不可用,要么用起来不方便,所以,很多时候我们会基于这样的原则来混合使用QML和C++:使用QML构建界面,使用C++实现非界面的业务逻辑和复杂运算。

贝勒里恩的博客 1773

C++与QML混合编程技术(传递自定义数据类型)

C++与QML混合编程就是优势互补的编程策略,使用QML高效便捷地构建UI,使用C++实现业务逻辑和复杂算法。

weixin_38880029的博客 4458

多看看别人的代码之一

1.qml与c++混合编程

抬头做人低头做事 520

Qt Quick C++与QML混合编程

声明:本例子是Qt Quick核心编程中的一个小例子,有关混合编程的方式。 有关详细编程,请查看对应书籍。 话不多说看效果图: 首先我们创建的是一个QtquickApp,工程名字为colorMaker项目,然后我们添加ColorMaker类: colorMaker.h #ifndef COLORMAKER_H #define COLORMAKER_H #include <QObject> #include <QColor> #include <QDa...

比卡丘不皮的博客 1419

46. Qt Android调用Java代码进行辅助开发 -- 框架搭建

在Qt中提供了调用Java代码的接口,比较方便。然后创建一个CPP文件用于辅助QML端调用java代码,本例创建的.cpp文件命名为javahandler.cpp,在QT中提供了一个接口。,注意从这个文件夹开始,文件夹的名称就是后面java代码的包名了,这个包名是要添加到java代码中的,比如java代码所在路径为。此时已经创建了一个java文件,还需要将这个文件的设定为启动时自动加载的默认文件,回到之前的android配置文件中,点击下图中。文件夹,多出了其它的一些文件,这些多余的文件是因为创建。

山间点烟雨 364

UE4逆向实战:如何快速定位UWorld和GName的5种实用技巧(含版本差异分析)

本文详细介绍了UE4逆向工程中快速定位UWorld和GName的5种实用技巧,包括特征码定位法、动态行为分析法、静态符号分析法等,并针对不同版本差异提供了适配方案。特别强调了UWorld作为游戏世界核心容器和GName作为名称管理系统的重要性,帮助开发者高效进行游戏逆向分析。

star的博客 896

QML与C++混合编程

QML与C++混合编程 一、QML访问c++ 两种访问方法: 1、在Qt元对象系统中注册C++类,在QML中实例化、访问; 2、在C++中实例化并设置为QML上下文属性,在QML中直接使用。 对比:与后者相比,前者可以使C++类在QML中作为一个数据类型,例如函数参数类型或属性类型,也可以使用其枚举类型、单例等,功能更强大。 1、信号和槽 2、枚举类型 3、Q_INVOKABLE 4、Q_PROP...

大千世界 371

用FPGA驱动WS2812B点阵,手把手教你实现动态文字显示(附完整Verilog代码)

本文详细介绍了如何使用FPGA驱动WS2812B点阵实现动态文字显示,包括硬件连接、Verilog代码实现和动态效果设计。通过精确的时序控制和数据处理,读者可以掌握FPGA与WS2812B的交互技术,并实现炫酷的显示效果。附完整Verilog代码,适合硬件爱好者和工程师参考实践。

weixin_30482383的博客 669

Qt C++与QML混合编程(2)- QML中使用C++的枚举、结构体、列表类型的函数

C++中返回函数返回的枚举类型、结构体类型、列表类型的函数是不能直接作为QML使用的。下面介绍C++中使用这些类型作为返回值的函数使用。 1. 使用枚举类型 2. 使用结构体类型 3. 使用列表类型 1. 使用枚举类型 C++的枚举类型如果要在QML中使用,需要在使用Q_ENUMS去修饰这个枚举类型。 #include &lt;QObject&gt; #includ...

不会飞的纸飞机的博客 8792

11.3 海岛微电网与工业园区的构网应用

海岛微电网与工业园区配电网是构网技术下沉应用的两大典型场景。海岛微电网以构网型储能为核心,解决孤岛系统稳定性问题,需具备黑启动、多能源协调和故障穿越能力;工业园区则侧重电能质量治理、并离网无缝切换和经济优化运行。两类场景均需解决多机并联稳定性、故障特性适配和分层协同控制等关键技术。构网型变流器的电压源构建能力、自适应控制策略及飞轮储能等特殊应用,为构建高可靠性、高经济性的分布式能源系统提供了创新解决方案。

技术工作者 1086

Edge主页被2345劫持?手动清理注册表与组策略的完整方案

浏览器主页劫持是Windows系统中常见的恶意篡改行为,其原理是通过修改注册表、快捷方式、组策略等多处系统配置,强制锁定浏览器启动页。这类劫持不仅影响上网体验,还可能带来隐私泄露和恶意软件感染风险。在安全防护与系统优化场景中,掌握手动清理主页劫持的技能至关重要。本文针对Edge主页被2345导航劫持的问题,深入解析劫持入口,提供从快捷方式、注册表到组策略的逐层清理步骤,并给出防复发策略,帮助用户彻底摆脱顽固劫持。

weixin_30582943的博客 385

qml与c++混合编程

QML 与 C++ 混合编程内容:1. QML 扩展2. C++ 与 QML 交互3. 开发时要尽量避免使用的 QML 元素4. demo 讲解5. QML 语法C++ 与 QML 的交互是通过注册 C++ 对象给 QML 环境得以实现的:在 C++实现中,非可视化的类型均为 QObject 的子类,可视化的类型均为 QDeclarativeItem 的子类。注意: QDeclarativeIt...

weixin_30362801的博客 207

OpenClaw 在 Windows 环境下的完整安装、配置和部署指南

介绍Windows环境下OpenClaw的完整安装,配置和部署的全流程

hxbao的专栏 1486

Quick | QML 文章汇总

1.QWidget调用QML界面,并交互(上):https://blog.youkuaiyun.com/qq_35173114/article/details/80863081 说明:里面的例子可以运行成功,实现了Widget部件与QML元素信号与槽的通信,程序我已下载,附上链接: 链接:https://pan.baidu.com/s/1uKwROiOWs9nBRvZcsOpgIA 提取码:0000 ...

HHT0506的博客 863

华为防火墙——本地Portal认证

配置IP地址、路由、Nat策略使得内网主机可以访问公网服务器对网段不进行认证,对网段进行portal认证。

m0_49864110的博客 3259

华为OD机试真题 新系统 9月20号 【字符串分组求和】

华为OD新系统机试真题【字符串分组求和】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【字符串分组求和】解析。

qq_45776114的博客 623

Qt 与Objective C混合编程——Qt for iOS

转自:https://blog.youkuaiyun.com/foruok/article/details/43351137 因为我写了一系列Qt的博文以及一本书《Qt on Android核心编程》,最近有好几个使用Qt的朋友问起 Qt for iOS 的事情,因为我在这方面的经验特别少,写不出系统的文章来,非常抱歉,不能给出令人满意的答复,推荐大家去看Jason’s Home,在我博客左侧边栏的友情链接里也有,他提供了 Qt for iOS 的一些非常有意义的文章,而且是基于实践的,他的 App 已经在 Ap..

xiaopei_yan的博客 1171

UE5接入在线直播视频源,如hls(m3u8)格式

UE5接入在线直播视频源

专注GIS开发 9500

深入C++与QT高频面试题(不定时更新)

本文总结了C++、数据库和Qt相关的常见面试题,涵盖以下核心内容: C++特性与智能指针 智能指针(unique_ptr/shared_ptr/weak_ptr)解决内存管理问题 构造函数/析构函数特性,虚函数与纯虚函数区别 STL容器分类与特性(vector/list/set/map等) 多线程编程 线程创建方式(Thread类/moveToThread) 线程同步机制(互斥锁/条件变量/读写锁) 进程间通信方式(管道/共享内存/消息队列) 数据库基础 事务ACID特性与操作流程 索引原理与使用场景 关系

阿博的博客 1255

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

掌控Qt内存大厦:深入解析对象树与所有权机制

文章摘要: Qt框架通过QObject父子关系模型提供了一套优雅的资源管理机制,有效解决了C++手动内存管理的难题。其核心在于对象树的层级结构:当父对象销毁时自动删除所有子对象,形成递归的析构链。这种机制基于组合模式设计,与RAII原则异曲同工。开发者必须严格遵循"子对象必须堆分配"的黄金法则,避免栈分配导致的崩溃风险。虽然Qt所有权模型与现代C++智能指针理念不同,但二者可通过明确所有权边界实现共存。理解这套机制对开发健壮的Qt应用至关重要,它不仅是内存管理工具,更是框架架构的核心范式。(149字)

greenspan的专栏 1114

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【无人机学习】无人机基础知识

█ 【安卓学习之DroidPlanner】前世今生 █ 相关文章: 【BX学习之生活问题】 福建工商-个体户-工商年报-登录方式 【BX学习之生活健康】你的年纪每天睡几小时最好 【BX学习之无线网卡】 COMFAST CF-726B 蓝牙4.2 免驱双频无线网卡 【BX学习之支付流程】收银机的支付流程手记 【BX学习之优快云】 删除上传的csdn资源 【BX学习之软件著作权】 软件著作权的申请 【BX学习之医社保】 医保、养老保险、申报户口资料 █ 读前说明: 本文通过学习别人写demo,

任我飞的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++与QML混合编程——QML中使用C++对象

本文详细描述在QML中使用C++类和对象的前提条件是什么、使用方式有哪些...

qq_42108501的博客 1334

Qt Quick 之 QML 与 C++ 混合编程详解

但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ,多线程,又如 XML 文档处理类库 QXmlStreamReader / QXmlStreamWriter 等等,在 QML 中要么不可用,要么用起来不方便,所以呢,很多时候我们是会基于这样的原则来混合使用 QML 和 C++: QML 构建界面, C++ 实现非界面的业务逻辑和复杂运算。一旦你在 C++ 中注册好了 QML 类型,就可以在 QML 文档中引入你注册的包,然后使用注册的类型。

宁静致远的博客 4285
上一篇: QML与c++混合编程
下一篇: QML之Menu菜单
艺丢丢
博客等级 码龄12年 16粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值