1. QT应用程序启动加载流程简介

1.1      QWS与QPA启动客户端程序区别

1.1.1   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。

1.1.2   QPA(Qt Platform Abstraction)介绍

QPA (Qt Platform Abstraction)是QT5的平台抽象层,并取代QT4中的QWS和平台端口。从QT5开始,QT自身不再单独实现窗口系统,QWS不复存在,取而代之的新机制是QPA,QPA使得QT对不同平台的支持变得更加灵活,当需要支持一个新平台时,只需为该平台编写一个QPA插件。QPA的相关代码分别在qtbase/serc/gui/kernel/qplatform/目录下,以及平台抽象层插件在qtbase/src/plugins/platforms/目录下。

QT4的程序在嵌入式Linux运行时,需要加入参数“-qws”启动QT窗口系统服务,如“./app -qws”运行app程序。QT5的程序运行时根据QT_QPA_PLATFORM变量指定的默认QPA插件,运行app程序, 也可以根据需要通过“-platform”来指定QPA插件运行,如:./app -platform eglfs、./app -platform sylixosfb。

1.2      QT程序简单示例

QT作为GUI界面库,提供了不同功能模块的编程接口,例如基本控件库、数据库操作、图表库、浏览器控件、以及3D模块。另外QT也提供一种类似HTML解释性脚本语言QML,并且与JavaScrip脚本的交互,提供了良好的接口操作。程序员可以通过C++和QML语言开发应用程序。如图 1.1所示:

图 1.1 qt应用程序示例

1.3      QApplication类

通过图 1.1客户端程序分析QT程序初始化流程。一个客户端程序创建的时候,都会首先创建一个QApplication app对象,它为客户端程序提供必须的运行环境。具体流程如图 1.2所示:

图 1.2 QApplication加载流程

1.4      QGuiApplication类

QGuiApplication在QT程序初始化中处于重要的地位,它主要初始化父类、解析命令行输入、初始化窗口的风格、初始化QPA、加载QT插件、初始化Gui资源、以及初始化OpenGL上下文环境。如图 1.3所示:

图 1.3 GUI初始化核心阶段

在QT5中可以根据不同系统提供QPA插件,为客户端程序提供显示服务,在SylixOS系统下,提供platform/plugin/sylixosfb 平台抽象层插件,为QT客户端程序提供渲染运行环境。如图 1.4所示:

图 1.4 创建SylixOS QPA插件

1.5      QCoreAppliction类

QCoreApplication为客户端程序提供国际化支持、以及事件分发机制。

转载于:https://blog.51cto.com/9508662/2169323

QT程序启动加载流程简介相关推荐

  1. spring启动加载流程

    上次看了spring的加载流程,今天发现或多都忘记了,今天又看了一下,顺便总结一下: 标题spring的web项目启动: 1.首先web容器(比如Tomcat)会读取配置在web.xml中的监听器,从 ...

  2. springboot启动加载流程

    springboot 启动类有两大核心: 一个是注解@SpringBootApplication,一个是main方法里面的SpringApplication.run. 1.通过main方法 启动spr ...

  3. Qt插件机制及加载流程

    简介 ​ 插件实际上就是一个个动态库,动态库在不同平台下后缀名不一样,比如在 Windows下以.dll结尾,Linux 下以.so结尾.那么开发插件其实就是开发一个动态库,该动态库能够很好的加载进主 ...

  4. iOS进阶之底层原理-应用程序加载(dyld加载流程、类与分类的加载)

    iOS应用程序的入口是main函数,那么main函数之前系统做了什么呢? 我们定义一个类方法load,打断点,查看栈进程,我们发现dyld做了很多事,接下来就来探究到底dyld做了什么. 什么是dyl ...

  5. 架设KMS服务器流程启动加载方法

    架设KMS服务器流程 启动加载方法 架设KMS服务器流程--启动加载方法 以下操作 root 一.准备Centos服务器CentOS-8.4.2105 1.下载http://mirrors.163.c ...

  6. Launcher启动流程加载流程学习

     声明: 图片本来是有的 涉及到有些代码不能示人没有贴上,不过仅文字说也足够了,请广大老爷们自行下载源码参看流程分析阅读. 目录 一.认识Launcher: 1 1.功能 1 2.样式 2 3.And ...

  7. 微信小程序上拉加载流程

    微信小程序上拉加载流程 1.首先需要在微信官方文档把scroll-view这个方法引入进来,然后使用这个方法,在样式里面写scroll-y,代表的是上下滑动,然后给滑动的盒子一个高度,100vh,然后 ...

  8. 从源码解析-结合Activity加载流程深入理解ActivityThrad的工作逻辑

    ActivityThread源码解析 前言 类简称 类简介 一 二 三 四 五 代理和桩的理解 ActivityThread ActivityThread.main AT.attach AMN.get ...

  9. Android6.0 keyguard锁屏加载流程分析

    锁屏界面的加载通常在android中有两种方式触发:android系统开机和screenOff(灭屏)后,再screenOn; 先来看 android系统开机时候的锁屏加载流程: 首先在系统启动过程中 ...

最新文章

  1. python简介、安装及基本设置
  2. Cluster模式潜在问题及解决方案、Web服务综合解决方案
  3. 在 Java CAPS 中使用 LDAP
  4. Go 语言学习笔记(一):基础知识
  5. 颜宁谈院士增选:导师施一公让我特别受益的是:纯粹,做事情的纯粹
  6. docker php gd png.h,docker php 容器安装GD库
  7. XML PUBLISHER输出excel存在科学计数
  8. 排序算法之五 快速排序(C++版本)
  9. XHTML的特征(规范)
  10. sidirect 连接西门子_INTOUCH DASSIDirect3.0 DASSIDirect3.0驱动是西门子PLC与Intouch连接通讯的必备驱动程序 - 下载 - 搜珍网...
  11. 【秋招面试】面试准备(一面准备)
  12. 中文手写数据集训练识别
  13. 一道我根本猜不出来的Trajan
  14. 金财致远咨询有限公司莅临美和易思参观交流
  15. Active Format Description (AFD)简介
  16. 换个服务器后网页加载很慢,打开网页很缓慢?换个DNS轻松解决问题
  17. 历代iPhone的分辨率
  18. 64位服务器IIS7.5运行ASP网站连接数据库错误解决方案
  19. Java8 装逼for循环写法
  20. 中国民族博览杂志中国民族博览杂志社中国民族博览编辑部2022年第7期目录

热门文章

  1. C和C++安全编码笔记:并发
  2. C++11中std::async的使用
  3. opencv使用cvFindContours提取联通域
  4. 【经验】如何查看gcc、g++不加-std时的默认版本
  5. html 显示消息数量,html实现消息按钮上的数量角标的实例详解
  6. 我与我的专业计算机作文500字,我的好朋友——电脑
  7. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...
  8. java axis2 开发_基于Apache axis2开发Java Web服务
  9. python 实用程序代码_【转】python常用工具代码
  10. svd奇异值分解_SVD(奇异值分解)到底在干什么