当前位置:

首页 > 软件教程 > Qt 6平台独特API解析

Qt 6平台独特API解析

  虽然Qt解决了编写应用程序的许多特有任务,但始终存在Qt无法解决的极端情况,或者在特定于平台的API或其他工具包之上构建功能更有意义的情况。我们要为Qt6解决的任务之一是清理和协调访问平台特定功能所需的各种机制。  现在,我们将在Qt6中查看这项工作的结果。完整的文档可在文档快照中找到,这是新的PlatformIntegration部分的一部分。1.类型转换  Qt的许多基本数据类型,例如QString,QPoint或QImage,都提供与本机之间等效类型的转换。例如,要在Apple平台上获取

本文目录

    Qt 6平台的特有API

      虽然Qt解决了编写应用程序的许多特有任务,但始终存在Qt无法解决的极端情况,或者在特定于平台的API或其他工具包之上构建功能更有意义的情况。我们要为Qt 6解决的任务之一是清理和协调访问平台特定功能所需的各种机制。

      现在,我们将在Qt 6中查看这项工作的结果。完整的文档可在文档快照中找到,这是新的Platform Integration部分的一部分。

    1. 类型转换

      Qt的许多基本数据类型,例如QString,QPoint或QImage,都提供与本机之间等效类型的转换。

    例如,要在Apple平台上获取当前用户的用户名:

    代码语言:javascript代码运行次数:0运行复制
    NSProcessInfo *processInfo = NSProcessInfo.processInfo;QString userName = QString::fromNSString(processInfo.userName)

      有关所有转换类型的完整列表,请参见"类型转换"概述。

    2. 窗口嵌入

      由基础平台API创建的Windows既可以用作Qt窗口的父容器,也可以作为子窗口嵌入到Qt窗口中。

      如果应用程序主要使用本机平台API编写,但是应用程序的某些部分使用Qt(例如绘制专用UI)时,前者很有用。要将Qt嵌入到本机应用程序的窗口层次结构中,请使用QWindow::winId()获取Qt窗口的本机句柄,然后使用本机API将窗口重新纳入本机UI。

      如果本机平台或其他工具包将专用控件公开为本机窗口,则后者很有用。通过使用QWindow::fromWinId()将本机窗口句柄包装在QWindow中,然后可以像其他任何QWindow一样将窗口重新父级到Qt窗口层次结构中。要将这个QWindow重新父化为基于Qt Widget的UI,请使用特定于Widget的QWidget::createWindowContainer()函数。

    3. 事件处理

      Qt中的大多数事件处理用例已通过跨平台事件传递( 通过QWindow::event()和友元,或通过QObject::installEventFilter() )得到了充分覆盖。

    &emsp 上面做法还是不够的,Qt还提供对本机事件传递的访问。可以使用QCoreApplication::installNativeEventFilter()安装接收所有本地事件的全局事件过滤器,而可以在QWindow::nativeEvent()中处理每个窗口的本地事件。

      注意:干扰本机事件流可能会使Qt处于不一致状态。这些API应该主要用于增强Qt的现有事件处理,例如,Qt尚未处理的事件。

    4. 本机接口

      上面提到的API未涵盖的平台特定功能由新的通用本机接口机制处理。该机制替代了平台面向用户的API以及QPA级别(QPlatformNativeInterface)的API。这些接口提供对它们扩展的类的本机或特定于平台的API的访问。

      这些接口位于QNativeInterface命名空间中,并涵盖了一些用例,例如访问基础本机句柄,采用现有的本机句柄或提供平台特定的API。

      大多数旧平台API可以在QNativeInterface::Private名称空间中找到,因为这些API大部分被其他内部代码使用。随着时间的流逝,我们将基于反馈和用例公开更多这些API。

    4.1 访问基础本机句柄

      在Qt中未公开本机平台的功能的情况下,访问由Qt维护的本机句柄,并使用这些句柄调用本机API可能会有所帮助。

      例如,在MacOS为了访问底层的NSOpenGLContext QOpenGLContext,经由QNativeInterface::QCocoaGLContext本地接口:

    代码语言:javascript代码运行次数:0运行复制
    using namespace QNativeInterface;if (auto *cocoaGLContext = glContext->nativeInterface())    [cocoaGLContext->nativeContext() makeCurrentContext];

      上面代码中,通过QOpenGLContext::nativeInterface()访问器访问本机接口,该访问器确保请求的接口可用,否则返回空指针。然后,可以通过nativeContext()访问到NSOpenGLContext。

    4.2 采用现有的本机句柄

      与窗口嵌入用例类似,在某些情况下,本机平台或其他工具包已创建要传递给Qt的本机句柄-包装现有的句柄而不是创建新的句柄。

      例如,采用现有的NSOpenGLContext,并使用它与Qt创建的上下文共享资源:

    代码语言:javascript代码运行次数:0运行复制
    using namespace QNativeInterface;QOpenGLContext *adoptedContext = QCocoaGLContext::fromNativeContext(nsOpenGLContext);anotherContext->setShareContext(adoptedContext);

      上下文是由QNativeInterface::QCocoaGLContext特定于平台的工厂方法创建。

    4.3 访问平台特定的API

      在某些情况下,虽然API特定于平台而不能包含在跨平台Qt类中,但是仍然有用。这些API的访问方式与通过nativeInterface()访问本机句柄的方式相同,也可以作为本机接口中的静态函数直接使用。

      例如,要在Windows上获取OpenGL模块句柄:

    代码语言:javascript代码运行次数:0运行复制
    using namespace QNativeInterface;HMODULE moduleHandle = QWGLContext::openGLModuleHandle();

      或通过其平台窗口句柄来调整Windows窗口的边框行为:

    代码语言:javascript代码运行次数:0运行复制
    using namespace QNativeInterface::Private;if (auto *windowsWindow = dynamic_cast(window->handle()))    windowsWindow->setHasBorderInFullScreen(true);
    4.4 源和二进制兼容性

      需要注意的是,本机接口API没有源或二进制兼容性保证,这意味着使用这些接口的应用程序只能保证与其开发的Qt版本一起使用。这使我们能够根据需要调整和添加这些API,从而使它们在跟踪基础本机功能方面更加灵活。

    5. 附加模块

      "extras"模块已在Qt 6.0中剔除。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程 qt
    相关文章 更多
    python qt环境搭建与验证:后端开发者的实操步骤
    python qt环境搭建与验证:后端开发者的实操步骤

    针对后端开发者的python qt实操指南,涵盖环境检查、虚拟环境创建、依赖安装及状态验证。基于Python官方文档,提供可复制的命令行步骤与排错决策路径,确保开发环境的一致性与可复现性。

    PYTHON QT GUI快速编程 PYQT编程指南
    PYTHON QT GUI快速编程 PYQT编程指南

    由于您未提供需要改写并生成摘要的原文内容,系统无法根据要求生成摘要。请提供完整的文章正文,以便进行二次处理。当前缺少原文,无法完成摘要生成任务,请补充原文信息。

    QT多种版本下载及VS2017+QT5.13.2配置教程
    QT多种版本下载及VS2017+QT5.13.2配置教程

    想要获取各种版本的Qt及其相关工具的下载地址吗?以下是详细的链接和搭建环境的指南。所有Qt版本下载地址:http://download.qt.io/archive/qt/所有QtCreator下载地址:http://download.qt.io/archive/qtcreator/所有QtVS开发插件下载地址:http://download.qt.io/archive/vsaddin/Qt相关下载大全:http://download.qt.io/记录一下VS2013+QT5.3.1环境搭建过程:前提条

    用WinAPI Beep播放音乐教程
    用WinAPI Beep播放音乐教程

    在GitHub上发现了有趣的仓库,通过Beep函数实现歌曲播放功能,与大家分享。仓库地址:https://github.com/akachronix/Beeper利用Windows的Beep函数,可以让系统发出蜂鸣声。在Qt环境中,通过QApplication::beep()可以触发系统警告声。Beep函数的原型如下:BOOLBeep(DWORDdwFreq,DWORDdwDuration)参数解释:dwFreq:设置蜂鸣声的频率,单位为赫兹(Hz)。dwDuration:设定蜂鸣声

    Qt处理Excel的实用库推荐
    Qt处理Excel的实用库推荐

    基于Windows系统的操作:利用Windows系统的ActiveX对象(QAxObject)来操作Excel。使用ODBC来操作Excel文件,这需要安装MSAccess数据库引擎。第三方独立库库.xls.xlsx读写兼容平台QtXlsx×√√√跨平台xlsLib√××√跨平台libxls√×√×跨平台LibXL√√√√跨平台qtXLS√×√√WindowsBasicExcel√×√√WindowsNumberDuck√×√√Windows;Linux2.1QtXlsx介绍:Qt的XLSX模块

    在Qt中怎么操作MySQL数据库
    在Qt中怎么操作MySQL数据库

    一、安装驱动(1)安装在Qt中操作MySQL数据库首先要安装mysql的驱动文件,将MySQL下的libmusql.dll文件复制到Qt的安装路径下的bin文件夹下即可。直接将libmysql.dll文件粘贴到此文件夹中。(2)验证驱动是否安装成功复制成功之后来测试一下驱动程序是否安装成功,新建一个文件,选择Qt设计师界面类,后面的操作都保持默认即可。在新生成的.cpp文件中引入以下库#include#include#include#include#include#include#include在构造函数

    QT出现没有MySQL驱动怎么手动编译
    QT出现没有MySQL驱动怎么手动编译

    报错代码:"QSqlDatabase:QMYSQLdrivernotloaded,QSqlDatabase:availabledrivers:QSQLITEQODBCQODBC3QPSQLQPSQL7"压根就没有QMYSQL,那么就需要我们手动编译,非常简单。笔者的配置:QT版本:5.13.0MySQL数据库是使用的SQLyog,一个像excel的非常简单的MySQL数据库处理软件1.下载64位的MySQLCommunityServer下载后解压备用,不用安装哦。2.在QT安装目录中找到qt安装目录找到:

    Qt连接MySQL数据库的步骤是什么
    Qt连接MySQL数据库的步骤是什么

    1.直接通过MySQL的驱动加载数据库1)所需代码QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL");db.setHostName("127.0.0.1");db.setPort(3306);db.setDatabaseName("数据库名");db.setUserName("用户名");db.setPassword("密码");boolok=db.open();if(ok){QMessageBox::information(this,"infor","s

    endnote怎么用 文献管理入门步骤
    endnote怎么用 文献管理入门步骤

    学习 EndNote 基础用法:在 Windows 上建立本地文献库,手动录入期刊论文题录,通过 Word 插件插入引文并更新参考文献格式,最后完成库的压缩备份以防数据丢失。

    BarTender怎么导入PDF文件
    BarTender怎么导入PDF文件

    详解如何在BarTender Designer 2022中导入单页PDF文件。步骤包括新建模板、从文件插入PDF图片、调整尺寸比例保持原貌、预览及保存BTW工作文件。适用于需要保留原有PDF标签样稿外观的场景。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。