当前位置: 首页 > 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窗口句柄竟然是这样获取

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

相关文章:

  • Python快速入门 —— 第五节:接口开发
  • 利用secureCRT向虚拟机发送文件(secureCRT安装使用教程)
  • AI杂七杂八系列(1)——工程篇
  • 学习大数据DAY58 增量抽取数据表
  • HTTPTomcat
  • Python数据分析-Matplotlib快速入门
  • 重塑在线软件开发新纪元:集成高效安全特性,深度解析与评估支持浏览器在线编程的系统架构设计
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】003 - vmlinux.lds 链接脚本文件源码分析
  • MongoDB实现高级RAG:Parent-Document检索技术详解
  • 胡学乱想----前端知识点(css色彩)
  • GEE 案例——利用MODIS数据和NDWI指数进行美国五大湖水体计算和时序分析(直方图统计和面积统计)
  • 【jvm】记一次hive堆heap内存溢出的排查
  • 编译运行 webAssembly(wasm)
  • Linux bash 关联数组
  • 选择排序
  • SQL数据库(MySQL)
  • 在MindSearch中使用SiliconCloud:全面指南**
  • C++(2)之Linux多线程服务端编程总结
  • 【AI视频】复刻抖音爆款AI数字人作品初体验
  • Mysql 面试题总结
  • stack - queue
  • 微软九月补丁星期二发现了 79 个漏洞
  • 研1日记12
  • Rocky Linux 9安装mysqlclient库报错的解决方法
  • Spring Boot母婴商城:安全、便捷、高效
  • php实现kafka
  • YOLOv10改进系列,YOLOv10损失函数更换为Powerful-IoU(2024年最新IOU),助力高效涨点
  • 工具知识 | Linux 常用命令参考手册
  • mysql 常用知识点总结
  • conda常用指令