• Qt介绍1---QPA(Qt Platform Abstraction)


    Qt是一个夸平台的库(一直宣称“Qt everywhere”),但是Qt底层不是夸平台的。比如:Qt中Gui部件的核心类QWidget,该类除了qwidget.h 和 qwidget.cpp两个原文件外,还有

    kernel/qwidget_mac.mm
    kernel/qwidget_qws.cpp
    kernel/qwidget_win.cpp
    kernel/qwidget_s60.cpp
    kernel/qwidget_x11.cpp
    kernel/qwidget_wince.cpp


    在源代码中,

    #if defined(Q_WS_X11)
    ...
    #elif defined(Q_WS_MAC)
    ...
    #elif defined(Q_WS_WIN)
    ...
    #endif
     

    而这一切都使得将 Qt 移植到一个新的窗口系统变的不太容易。但是QPA出现了,官方文档的解释为:

    Lighthouse is the project name for the Qt Platform Abstraction – making it much easier to port Qt to new platforms.

    Lighthouse是Qt Platform Abstraction项目的名字,它使得将Qt移植到新的平台变得比容易。

    QPA(Qt Platform Abstraction)介绍

    From the Qt Project wiki :

    “QPA is the platform abstraction layer for Qt 5 and replaces QWS and the platform ports from Qt 4.”QPA (Qt Platform Abstraction) 即Qt使用QWS,Qt5使用QPA。

        Qt4的程序在嵌入式Linux运行时,需要加入参数“-qws”启动Qt窗口系统服务,如“./app -qws”运行app程序。从Qt5.0开始,Qt自身不再单独实现窗口系统,QWS不复存在,取而代之的新机制是QPA(Qt平台抽象),QPA使得Qt对不同平台的支持变得更加灵活,当需要支持一个新平台时,只需为该平台编写一个QPA插件。

    QPA的相关代码在qtbase/src/gui/kernel/qplatform*
    其插件在qtbase/src/plugins/platforms/

    Qt5运行时需要通过“-platform”来制定QPA插件,如果不指定就默认使用QPA插件,在QT_QPA_PLATFORM变量制定,比如:

     ./app -platform eglfs

     ./app -platform linuxfb

    QWS(Qt Window System)介绍

       QWS(Qt Windows System)是QT自行开发的窗口系统,体系结构类似X Windows,是一个C/S结构,由QWS Server在物理设备上显示,由QWS Client实现界面,两者通过socket进行彼此的通讯。在很多嵌入式系统里,QT程序基本上都是用QWS来实现,这样保证程序的可移植性。

       另外在运行QT程序时添加-qws参数,表示这个程序时QWS Server,否则是QWS Client。任何一个基于QT的application都可以做QWS Server。当然QWS Server一定先于QWS Client启动,否则QWS Client将启动失败。在实际应用中一般会指定某个特殊的application做QWS Server,这个application一般还会管理一些其它的系统资源。

       QWS Server管理机制:QWS Server是一个server socket,QWS Client是一个client socket。QWS Client启动时会主动向QWS Server的server socket建立连接。而后就QWS Server通过这个socket传递QWS Command和QWS Event来管理QWS Client。

  • 相关阅读:
    MySql中的变量定义
    mysql常用脚本
    Spring中依赖注入的使用和配置
    在linux下通过sh运行java程序
    linux下shell脚本学习
    eclipse导出jar包
    mysql中游标的使用
    netty中LengthFieldBasedFrameDecoder的使用
    网络游戏服务器架构(转)
    H2 database的使用
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/10036244.html
Copyright © 2020-2023  润新知