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

QtWidgets和QtQuick融合(QML与C++融合)

先放一个界面效果吧!

说明:该演示程序为一个App管理程序,可以将多个App进行吸入管理。

(动画中的RedRect为一个带有QSplashScreen的独立应用程序)

  • 左侧边栏用的是QQuickView进行.qml文件的加载(即QtQuick环境)
  • 右侧是用layout进行QWidget的融入(QtWidgets环境)
  • 期间会有多次qml & c++的交互

一、qml中访问c++中的内容

关键点:.h中继承QObject、Q_DECLARE_METATYPE;.cpp中qmlRegisterType

class AppInfo : public QObject
{Q_OBJECTQ_PROPERTY(QString showName READ showName WRITE setShowName NOTIFY showNameChanged)Q_PROPERTY(QString realName READ realName WRITE setRealName NOTIFY realNameChanged)Q_PROPERTY(QString coreName READ coreName WRITE setCoreName NOTIFY coreNameChanged)Q_PROPERTY(QString iconPath READ iconPath WRITE setIconPath NOTIFY iconPathChanged)
public:AppInfo(QObject* parent = nullptr);AppInfo(const QString& showName, const QString& realName, const QString& coreName, const QString& iconPath, QObject* parent = nullptr);AppInfo(const AppInfo& other);AppInfo& operator=(const AppInfo& other);bool operator==(const AppInfo& other);QString showName() const;QString realName() const;QString coreName() const;QString iconPath() const;void setShowName(const QString& showName);void setRealName(const QString& realName);void setCoreName(const QString& coreName);void setIconPath(const QString& iconPath);signals:void showNameChanged();void realNameChanged();void coreNameChanged();void iconPathChanged();private:QString showName_;QString realName_;QString coreName_;QString iconPath_;
};Q_DECLARE_METATYPE(AppInfo)
qmlRegisterType<AppInfo>();

这样以后,

1.1.可以直接在qml中进行该类的实例化,进而进行访问(qmlRegisterType时需要添加参数);

1.2.也可以直接在其他类中直接返回该类指针,直接给qml进行使用(当然前提也是其他类也进行了注册,已经在qml里实例化了)。

1.3.还可以再c++处实例化,然后设置到qml上下文中

 2.1.也可以直接继承QAbstractListModel等类,进行实例化,qml中可以直接访问相关属性

主要在于红框中的方法的重写。


 二、c++中访问qml中的内容

主要在于从qml上下文中获取根QObject*,进而通过findChild进行相关元素的获取。进而通过QMetaObject::invokeMethod进行相关qml中function的调用:


相关注意点:

qml中访问只能访问类的指针,不能访问类对象;

qmlRegisterType注册类时,带了namespace的类,类指针在qml中是不能够访问的。

http://www.lryc.cn/news/141193.html

相关文章:

  • 基于Vue的3D饼图
  • Gateway简述
  • Midjourney API 的对接和使用
  • 01 消息引擎系统
  • npm 卸载 vuecli后还是存在
  • Unity 之利用 localEulerAngle与EulerAngle 控制物体旋转
  • 从零学算法 (剑指 Offer 13)
  • 854之数据结构
  • Redis从基础到进阶篇(二)----内存模型与内存优化
  • DBO优化SVM的电力负荷预测,附MATLAB代码
  • 第一百二十五回 dart中List和Map的常见用法
  • 小白到运维工程师自学之路 第七十九集 (基于Jenkins自动打包并部署Tomcat环境)2
  • 林【2021】
  • c语言练习题30:判断一个数是否为2^n
  • VX小程序 实现区域转图片预览
  • HTML5-1-标签及属性
  • 5017. 垦田计划
  • 【校招VIP】产品思维分析之面试新的功能点设计
  • indexDB vue 创建数据库 创建表 添加对象数据
  • Django基础1——项目实现流程
  • 基于SSM的在线购物系统——LW模板
  • Mac操作系统上设置和配置PPPoE连接
  • Python类的属性和方法
  • C#Queue<T>队列出现弹出元素被最后一次压入得元素覆盖的问题
  • python3GUI--模仿一些b站网页端组件By:PyQt5(详细介绍、附下载地址)
  • 聚类分析概述
  • 建模杂谈系列234 基于图的程序改造
  • requestAnimationFrame(RAF)
  • 【JavaScript笔记】面对对象与构造函数
  • ​LeetCode解法汇总5-正则表达式匹配​