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

【Qt】Qml界面中嵌入C++ Widget窗口

1. 目的

qml做出的界面漂亮,但是执行效率低,一直想找一个方法实现qml中嵌入c++界面。现在从网上找到一个方法,简单试了一下貌似可行,分享一下。

2. 显示效果

在这里插入图片描述

3. 代码

3.1 工程结构

在这里插入图片描述

3.2 pro文件

  • 需要添加widgets => QT += quick widgets
QT += quick widgets# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cppRESOURCES += qml.qrc# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

3.3 main.cpp文件(重点)

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QWindow>
#include <QtWidgets/QWidget>
#include <QPushButton>
#include <QApplication>int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endifQApplication app(argc, argv);	//这里改为QApplication QQmlApplicationEngine engine;const QUrl url(QStringLiteral("qrc:/main.qml"));QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,&app, [url](QObject *obj, const QUrl &objUrl) {if (!obj && url == objUrl)QCoreApplication::exit(-1);}, Qt::QueuedConnection);engine.load(url);//获取QML源窗口QObject *QmlObj = engine.rootObjects().first();QWindow *QmlWindow = qobject_cast<QWindow *>(QmlObj);QmlWindow->setTitle("C++ set title");WId parent_HWND = QmlWindow->winId();//新建widgetQWidget widget;widget.setGeometry(0, 0, 300, 300);QPushButton btn("send", &widget);btn.setGeometry(5, 5, 60, 20);widget.winId();//将widget插入QMLwidget.windowHandle()->setParent(QmlWindow);widget.show();return app.exec();
}

3.4 main.qml文件

  • 这里的titileHelllo World被c++修改了
import QtQuick 2.15
import QtQuick.Window 2.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")
}

4. 参考

震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【HarmonyOS NEXT】DevEco快速实现真机截屏,并保存到电脑
  • SMS over IP原理
  • Java设计原则
  • Mybatis 和 数据库连接
  • Java中的异步编程模式:CompletableFuture与Reactive Programming的实战
  • TIOBE 编程指数 9 月排行榜公布 VB.Net第七
  • 【深度学习】(3)--损失函数
  • Numpy
  • Java后端性能监控:使用JMX与Java Mission Control的深入解析
  • ppt一键生成免费版软件有哪些?如何高效生成论文答辩?
  • Rust: AES 加密算法库
  • Springboot请求响应案例
  • Axure RP 9最新安装程序及汉化包下载(支持Win、Mac版,附下载安装教程)
  • 游戏如何对抗定制挂
  • MATLAB矩阵下标引用
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Apache的80端口被占用以及访问时报错403
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Logstash 参考指南(目录)
  • MySQL数据库运维之数据恢复
  • Python学习笔记 字符串拼接
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • React系列之 Redux 架构模式
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • sublime配置文件
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 分享几个不错的工具
  • 力扣(LeetCode)965
  • 聊聊redis的数据结构的应用
  • 如何进阶一名有竞争力的程序员?
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 移动端高清、多屏适配方案
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • ![CDATA[ ]] 是什么东东
  • (JS基础)String 类型
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (转)h264中avc和flv数据的解析
  • (转)Mysql的优化设置
  • (转)winform之ListView
  • .net Application的目录
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net framework4与其client profile版本的区别
  • .Net 知识杂记
  • .NET6实现破解Modbus poll点表配置文件
  • .NET框架
  • .NET未来路在何方?
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @GetMapping和@RequestMapping的区别
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [ACP云计算]易混淆知识点(考题总结)
  • [C++] 从零实现一个ping服务
  • [C++]:for循环for(int num : nums)