tag 标签: Qt6

相关博文
  • 热度 10
    2023-3-10 11:32
    1526 次阅读|
    0 个评论
    B y Toradex 胡珊逢 在嵌入式领域中 Qt 作为普遍选择的 UI 方案目前已经发布 Qt6 版本。本文将介绍如何为 Toradex 的计算机模块使用 Yocto Project 将 Qt6 集成到镜像里。 首先根据 这里 的说明,准备好 Yocto Project 的编译环境。这里我们选择 Toradex 最新的 Linux BSP V6 为例,其基于 kirkstone 分支,这也是一个 LTS 版本。 进入 layers 目录,使用下面命令下载 Qt6.4.3 版本的 meta-qt6 文件。 ------------------------------- git clone -b 6.4.3 git://code.qt.io/yocto/meta-qt6.git ------------------------------- 在 meta-qt6/classes/ 目录下创建 populate_sdk_qt6.bbclass 文件。 ------------------------------- SUMMARY = "Meta package for building an installable Qt6 toolchain and SDK" inherit populate_sdk populate_sdk_qt6_base TOOLCHAIN_HOST_TASK:append = " nativesdk-packagegroup-qt6-toolchain-host" TOOLCHAIN_TARGET_TASK:append = " packagegroup-qt6-modules" FEATURE_PACKAGES_qtcreator-debug = "packagegroup-qt6-qtcreator-debug" ------------------------------- 在 meta-qt6/recipes-qt/packagegroups/ 目录下创建 packagegroup-qt6-qtcreator-debug.bb 文件。 ------------------------------- SUMMARY = "Remote debugging tools for QtCreator integration" LICENSE = "MIT" inherit packagegroup # Override by distro if needed VIRTUAL-RUNTIME_qtcreator-debug-ssh-daemon ?= "openssh-sshd" RDEPENDS:${PN} = " \ gdbserver \ ${VIRTUAL-RUNTIME_qtcreator-debug-ssh-daemon} \ openssh-sftp-server \ qtdeclarative \ " ------------------------------- 在 meta-toradex-demos/recipes-images/images/ 目录下创建 packagegroup-tdx-qt6.bb 文件。 ------------------------------- SUMMARY = "Packagegroup which provides most QT6 libraries and a QT6 demo" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup PROVIDES = "${PACKAGES}" PACKAGES += " \ ${PN}-fonts \ ${PN}-libs \ " RRECOMMENDS:${PN} = " \ ${PN}-fonts \ ${PN}-libs \ " SUMMARY:${PN}-fonts = "Some fonts useful for QT5" RRECOMMENDS:${PN}-fonts = " \ ttf-dejavu-common \ ttf-dejavu-sans \ ttf-dejavu-sans-mono \ ttf-dejavu-serif \ " SUMMARY:${PN}-libs = "QT5 libraries" RRECOMMENDS:${PN}-libs = " \ qt3d \ qtbase \ qtcharts \ qtcoap \ qtconnectivity \ qtdatavis3d \ qtdeclarative \ qtimageformats \ qtlottie \ qtmqtt \ qtmultimedia \ qtnetworkauth \ qtopcua \ qtquick3d \ qtquicktimeline \ qtremoteobjects \ qtscxml \ qtsensors \ qtserialbus \ qtserialport \ qtsvg \ qttools \ qttranslations \ qtvirtualkeyboard \ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'qtwayland', '', d)} \ qtwebchannel \ qtwebsockets \ " ------------------------------- 在 meta-toradex-demos/recipes-images/images/ 目录下创建 tdx-reference-multimedia-qt6-image.bb 文件。 ------------------------------- require tdx-reference-minimal-image.bb SUMMARY = "Toradex Embedded Linux Reference Multimedia Image" DESCRIPTION = "Image for BSP verification with QT and multimedia features" inherit populate_sdk_qt6 #Prefix to the resulting deployable tarball name export IMAGE_BASENAME = "Reference-Multimedia-Image" IMAGE_FEATURES += " \ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'weston', \ bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11-base', '', d), d)} \ " IMAGE_INSTALL += " \ packagegroup-tdx-cli \ packagegroup-tdx-graphical \ packagegroup-tdx-qt6 \ packagegroup-fsl-isp \ \ bash \ coreutils \ less \ makedevs \ mime-support \ net-tools \ util-linux \ v4l-utils \ \ gpicview \ media-files \ " ------------------------------- 在 build/conf/bblayers.conf 将 meta-qt6 添加进来,并移除原来的 meta-qt5 。 ------------------------------- # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly LCONF_VERSION = "7" BBPATH = "${TOPDIR}" BBFILES ?= "" BBLAYERS ?= " \ ${TOPDIR}/../layers/meta-toradex-nxp \ ${TOPDIR}/../layers/meta-freescale \ ${TOPDIR}/../layers/meta-freescale-3rdparty \ \ ${TOPDIR}/../layers/meta-toradex-bsp-common \ \ ${TOPDIR}/../layers/meta-openembedded/meta-oe \ ${TOPDIR}/../layers/meta-openembedded/meta-filesystems \ ${TOPDIR}/../layers/meta-openembedded/meta-gnome \ ${TOPDIR}/../layers/meta-openembedded/meta-xfce \ ${TOPDIR}/../layers/meta-openembedded/meta-networking \ ${TOPDIR}/../layers/meta-openembedded/meta-multimedia \ ${TOPDIR}/../layers/meta-openembedded/meta-python \ ${TOPDIR}/../layers/meta-freescale-distro \ ${TOPDIR}/../layers/meta-toradex-demos \ ${TOPDIR}/../layers/meta-qt5 \ \ \ ${TOPDIR}/../layers/meta-toradex-distro \ ${TOPDIR}/../layers/meta-yocto/meta-poky \ ${TOPDIR}/../layers/openembedded-core/meta \ " #${TOPDIR}/../layers/meta-qt5 ------------------------------- build/conf/local.conf 添加下面两个配比,移除 X11 和 directfb 相关配置。 ------------------------------- DISTRO_FEATURES:remove = " directfb x11" IMAGE_INSTALL:remove = " gpicview" ------------------------------- 最后使用 bitbake 命令即可编译包含 Qt6 的镜像和 SDK 。
相关资源
  • 所需E币: 0
    时间: 2024-5-14 09:23
    大小: 2.61KB
    上传者: 开心就很好了
    一、QT概述Qt是1991年由HaavardNord和EirikChambe-Eng开发的跨平台C++图形用户界面应用程序开发框架。发展至今,它既可以开发GUI程序,也可以开发非GUI程序,比如控制台工具和服务器。Qt是一个跨平台的C++应用程序框架,支持Windows、Linux、MacOSX、Android、嵌入式系统等。也就是说,Qt可以同时支持桌面应用程序开发、嵌入式开发和移动开发,覆盖了现有的所有主流平台。开发者只需要编写一次代码,而后在发布到不同平台之前重新编译即可。Qt的工具家族丰富,目前包括QtCreator、QtEmbedded、QtDesigner快速开发工具、国际化工具等。Qt实质上是用C++编写的大型类库,它为跨平台应用开发提供了一个完整的框架。Qt框架包含大量的类,支持GUI、数据库、网络、多媒体等各种应用的编程。Qt还对标准C++语言进行了扩展,引入了信号与槽、属性等机制,为跨平台和GUI程序的对象间通信提供了极大的方便。Qt还提供了一种自创的编程语言QML,它是类似于JavaScript的声明性语言。Qt提供了一个用QML编写的库QtQuick,它类似于QtC++类库,区别是QtQuick中的各种控件被称为QML类型(type)。QML用于描述程序的用户界面,将用户界面描述为对象树,每个对象具有自己的各种属性。Qt也支持Python,Qt类库的Python绑定版本比较多,比较常用的是PyQt和PySide二、Qt6软件特性Qt6是一款专业实用的编程开发工具。Qt6最新版优化了稳定性、功能性,并且包含Qt5.15中的所有常用功能以及为Qt6 添加的新功能。Qt6软件大大扩展了支持平台的范围,支持AppleSilicon上的macOS,同时改进了对WebAssembly的支持。QT6.0加入了许多新功能,以更好地支持现代工作负载,包括开始应用C++17,官方提到,Qt6现在要求使用的C++17兼容编译器,以便在开发QT应用程序时,使用较新的C++语言结构。另外,QT6还更新CMake构建系统,且采用全新的图形架构,并以QtQuick统一2D与3D开发体验。三、软件优点Qt6的架构变化Qt6中进行了一些更广泛的架构更改,包括:Qt6现在依赖于C++17兼容的编译器,这有助于清理和改进代码库,并为用户提供更现代的API在处理大型数据集和性能方面改进了低级容器类持续更新QML语言,使其更安全、更易于使用四、QML访问C++Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C++中得到扩展,在一定的条件下,QML就可以访问QObject派生类的成员,例如信号、槽函数、枚举类型、属性、成员函数等。QML访问C++有两个方法:一是在Qt元对象系统中注册C++类,在QML中实例化、访问;二是在C++中实例化并设置为QML上下文属性,在QML中直接使用。第一种方法可以使C++类在QML中作为一个数据类型,例如函数参数类型或属性类型,也可以使用其枚举类型、单例等,功能更强大。五、C++类的实现C++类要想被QML访问,首先必须满足两个条件:一是派生自QObject类或QObject类的子类,二是使用Q_OBJECT宏。QObject类是所有Qt对象的基类,作为Qt对象模型的核心,提供了信号与槽机制等很多重要特性。Q_OBJECT宏必须在private区(C++默认为private)声明,用来声明信号与槽,使用Qt元对象系统提供的内容,位置一般在语句块首行。Projects选择QtQuickApplication,工程名为Hello。六、Qt版本Qt的版本可以根据许可类型分为商业许可和开源许可,开源许可又分为GPLv2/GPLv3和LGPLv3。(1)商业版:商业许可需要付费,Qt公司目前采用的是按年付费的方式。商业许可允许开发者不公开项目的源代码。商业许可的Qt安装包里有更多的模块,某些模块只有在商业许可的版本中才有。(2)开源版:采用GPLv2/GPLv3许可。若用户编写的程序使用了GPL许可的Qt代码,则用户程序也必须使用GPL许可,也就是用户代码必须开源,但是允许商业化销售。GPLv3还要求用户公开相关硬件信息。简单来说,就是你“免费”使用的东西必须也“免费”提供给别人使用。根据开发目标的不同,Qt提供了3种安装包。安装包具有针对不同主机平台的版本,而且采用了不同的许可协议。
  • 所需E币: 0
    时间: 2024-5-14 13:34
    大小: 2.1KB
    在现代软件开发中,图形用户界面(GUI)是用户与程序交互的重要组成部分。Qt框架提供了一种强大的方式来构建跨平台的GUI应用程序,其中QML(QtMeta-ObjectLanguage)和C++的交互是一个重要的主题。本篇博文将深入探讨如何在QML中创建和操作C++对象,实现双向的交互。在Qt中,任何QML代码都可以访问QObject派生类实例的属性、方法和信号。以下是一个简单的C++类CppObject,演示了如何在QML中创建并操作该类的对象。由于QML引擎与Qt元对象系统的集成,可以从QML中访问任何从QObject继承的类的属性、方法和信号,C++代码既可以在应用中集成,也可以在插件中集成。QML访问C++数据主要有三种方法:1、将C++类的属性暴露给QML;2、从C++定义QML类型;3、用Context属性在QML中嵌入C++对象;自定义数据类型16种基础数据类型以外的其它数据类型是QML所无法识别的,可将它定义为复杂数据类型,结构体数据类型属于复杂数据类型中的一种。由于QObject子类都可以注册为QML对象类型,所以构造结构体对应的自定义类来与QML交互是可行的。创建自定义对象在Qt中,我们可以使用QObject作为基类创建自定义对象。首先,我们需要在C++中定义一个继承自QObject的类,并将其注册到QML中,使得QML可以访问到这个对象。具体的步骤如下:创建一个新的C++类,例如MyObject,并继承自QObject。在MyObject类中声明需要在QML中访问的属性和函数,并使用Q_PROPERTY和Q_INVOKABLE宏进行标记。在MyObject类中添加需要在QML中访问的信号,并使用Q_SIGNAL宏进行标记。在MyObject类中添加相应的槽函数,并在函数实现中处理信号的逻辑。在Qt的主程序中,使用qmlRegisterType函数将MyObject类注册到QML引擎中。如何实现可以被QML访问的C++类C++类要想被QML访问,首先必须满足两个条件:一是派生自QObject类或QObject类的子类,二是使用Q_OBJECT宏。QObject类是所有Qt对象的基类,作为Qt对象模型的核心,提供了信号与槽机制等很多重要特性。Q_OBJECT宏必须在private区(C++默认为private)声明,用来声明信号与槽,使用Qt元对象系统提供的内容,位置一般在语句块首行。下面例子在QtCreator3.1.2中创建,Projects选择QtQuickApplication,工程名为Gemini,Component选择QtQuick2.2,然后在自动生成的文件中添砖加瓦。QML访问C++一个C++类要想被QML访问,必须满足两个条件:1、从QObject类或QObject类的子类派生继承2、使用Q_OBJECT宏这和使用信号与槽的前提条件是一样的。QObject类是所有Qt对象的基类,作为Qt对象模型的核心,提供了信号与槽机制等很多重要特性。这两个条件是为了让一个类能够进入Qt强大的元对象系统(meta-objectsystem)中,而使用元对象系统,一个类的某些方法或属性才可能通过字符串形式的名字来调用。我们知道,QML其实是对JavaScript的扩展,融合了QtObject系统,它是一种新的解释型的语言,QML引擎虽然由QtC++实现,但QML对象的运行环境,说到底和C++对象的上下文环境是不同的,是平行的两个世界。如果你想在QML中访问C++对象,那么必然要找到一种途径来在两个运行环境之间建立沟通桥梁。Qt提供了两种在QML环境中使用C++对象的方式:(1)在C++中实现一个类,注册到QML环境中,QML环境中使用该类型创建对象。(2)在C++中构造一个对象,将这个对象设置为QML的上下文属性,在QML环境中直接使用该属性。