1,Qt 是一套跨平台的程序设计库,这套程序设计库主要用于 GUI 方面的程序设计开发,所以本系列博文主要是利用C++介绍 GUI 程序设计技术;

2,命令行应用程序:

1,命令行应用程序的特点(Command Line Interface):

1,是一种基于顺序执行结构的可执行程序;

1,有一个固定的开始、固定的结束;

2,程序执行过程中不需要与用户产生交互;

1,为什么叫做命令行应用程序,因为它体现出给人的感觉就是一 个一个的命令,比如 ls;

2,ls 这条命令其实对应着一个程序,这是一个命令行应用程序;

3,ls 一旦开始执行,就执行单一的列出文件或文件夹任务,列完后主动退出;

3,程序执行后给出最终的运行结果;

1,gcc a.c b.c c.c;

1,利用 gcc 这个命令行应用程序完成编译这三个 C 程序的任务,在编译器编译过程中不产生用户交互,编译结束后或者生成可执行程序或者给出错误信息或警告信息;

2,命令行应用程序的运行模式:

1,非常简单,就是从 main() 函数开始调用各种函数,调用完之后,我们的任务就完成了,程序运行结束;

2,特点:

1,程序的运行有固定的开始(敲回车运行某个命令的时候开始) 和固定的结束(命令行完成命令后结束);

3,命令行应用程序蕴含的软件设计方法:

1,一种面向过程的程序设计方法,将一个大的问题分解为各种小 的问题,然后将小的问题逐个解决,整个大的问题也就解决了,对应到这里就是 main() 函数要完成一个大任务,首先 function1()  完成一个小任务,然后 function2() 完成一个小任务,最后通过 function4() 完成一个任务,这样大任务就完成了;

3,命令行应用程序适用于:

1,单任务场合;

2,无交互或简单交互场合;

3,服务器应用场合:

1,自身运行所占用的资源很少;

4,命令行应用程序是早期计算机系统中的主要程序类型:

1,早期计算机系统主要用来进行科学计算,科学计算需要科学家输入数据,运行后给出结果,所以说对于科学计算来说必然有一个规定的开始、一个固     定的结束,计算机进行计算过程中,是不需要和我们当时的科学家进行交互的,科学家只需要知道一个结果;

2,命令行应用程序的诞生是有历史原因的,早期的计算机系统中就只需要命令行应用程序就可以了;

3,图形界面应用程序:

1,图形界面应用程序的诞生:

1,随着计算机技术的发展,计算机走进日常生过;

2,计算机程序开始需要处理各个领域中的问题;

1,处理大量非科学问题;

3,计算机用户已经不再是专业的计算机工作者;

2,问题:

1,如何让计算机程序更好的适应普通用户并走进日常生活?

1,用图形界面应用程序;

3,图形界面应用程序的特点(Graphic User Interface):

1,是一种基于消息驱动模型的可执行程序;

2,程序的执行依赖于用户的交互过程;

1,因为要和用户进行更好的交互;

3,程序执行过程中实时响应用户操作;

4,一般情况下程序执行后不会主动退出;

1,被动的、多任务程序;

2,和命令行应用程序最大的本质不同;

4,图形界面应用程序的运行模式:

1,设计图形用户界面是什么样子,这种设计最后会体现在我们的程序当中;

2,图形界面应用程序运行模式有一定的规律可循,一般而言会从main() 开始,显示有个性的图形界面需要首先定义主窗口,其次创建主窗口(对    于一个操作系统而言,它的主窗口样式一般都是一样的)、然后创建主窗口中的元素(按钮、菜单、工具栏)、之后显示主窗口,最后进入消息循环(等用户操作,为了让这个程序不能往下执行,则程序执行死循环), 这个循环等待着操作系统来给这个应用程序发消息;到

5,图形界面应用程序的消息处理模型:

1,本图是用户如何使用计算机的原理图;

2,普通的用户无法使用计算机,因为此时计算机只是一堆硬件,普通用户如果要使用计算机,需要借助操作系统的支持,当操作系统安装到计算机后,用户就可以使用计算机了;

3,用户的操作主要分为两类:鼠标操作,键盘操作;

4,用户对计算机操作后,操作系统内核就能够检测到用户操作,如果发现用户是点了鼠标,系统内核会根据当前操作点鼠标生成一个系统消息;

5,系统消息被系统内核发送到有焦点的应用程序;

6,图形界面应用程序中都有一个消息队列,系统消息是被放到有焦点的 应用程序中的消息队列中;

7,消息循环就会从这个队列中将系统消息取出来,然后调用消息处理函数;

8,图形界面应用程序必须编写消息处理函数用于处理对应的消息;

(9),图形用户界面应用程序多数时候就是编写消息处理函数处理消息。

6,图形界面任务程序适用于:

1,多任务场合:

1,功能比较强大;

2,编写文字、编程、画图;

2,强用户交互场合;

3,非专业计算机用户:

1,办公室职员;

2,图形界面应用程序是当代计算机中的主要程序类型;

4,图形界面程序 VS 命令行程序:

1,当代大型软件产品架构模型:

1,图形界面应用程序和命令行应用程序是互补的关系,不是竞争关系, 命令行程序由于单任务特性,一般用来开发后台应用程序,图形界面应用程序交互性比较好,用于用户界面交互层;

2,图形界面交互层用的技术有 Qt、MFC、.Net 等;

3,架构分成出网路更新模块、数据库管理模块、虚拟机引擎模块(为了扩展性、可修改可维护性)等的命令行程序,一般在安装软件下呈现为 .exe文件;

4,合理的应用图形界面应用程序和命令行应用程序往往会给我们的软件质量带来提高,这也是一个架构师的艺术,如何在某个领域选择更好的技术,要看到某种技术的优势在哪里,不要只看到新技术忽略旧技术;

5,小结:

GUI程序原理分析的更多相关文章

  1. 第1课 GUI程序原理分析

    1. 命令行应用程序 (1)命令行应用程序的特点 ①是一种基于顺序执行结构的可执行程序 ②程序执行过程中不需要与用户产生交互 ③程序执行后给出最终的运行结果 (2)命令行应用程序的运行模式——程序运行 ...

  2. 第2课 GUI程序实例分析

    1. GUI程序开发概述 (1)现代操作系统提供原生SDK支持GUI程序开发 (2)GUI程序开发是现代操作系统上的主流技术 (3)不同操作系统上的GUI开发原理相同 (4)不同操作系统上的GUI S ...

  3. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6967204 在Android系统中,不同的应用 ...

  4. GUI程序分析实例

    GUI程序开发概述 GUI程序开发原理 GetMessage(&msg)将消息队列中的消息取出来,在循环中进行处理. GUI程序开发的本质

  5. Handler系列之原理分析

    上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...

  6. 转载:AbstractQueuedSynchronizer的介绍和原理分析

    简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...

  7. NOR Flash擦写和原理分析

    NOR Flash擦写和原理分析 1. NOR FLASH 的简单介绍 NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直 ...

  8. 客户端GUI程序开发漫谈

    这篇文章包含了这个领域的很多开源项目的介绍,还有我多年来的心血和汗水  去年夏天的时候,我用QT做了一个小工具 后来还用QT做了流程设计器 我把程序分享给飞扬青云之后,他甚至搞出来一套QT的皮肤来 说 ...

  9. 使用AsyncTask异步更新UI界面及原理分析

    概述: AsyncTask是在Android SDK 1.5之后推出的一个方便编写后台线程与UI线程交互的辅助类.AsyncTask的内部实现是一个线程池,所有提交的异步任务都会在这个线程池中的工作线 ...

随机推荐

  1. 算法——得到数据流中前K大的数

    用优先队列 public PriorityQueue<Integer> kthLargest(int k, int[]a) { PriorityQueue<Integer> q ...

  2. 对vue源码之缓存的研究--------------引用

    探索vue源码之缓存篇 一.从链表说起 首先我们来看一下链表的定义: 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个 ...

  3. Devexpress MVC Gridview 获取到增删改的所有行数据(JSON) 并使用SQL事物保存数据

    //ModalChargeGridView Gridview的名字//Con_Shp_Chg 数据库表名//ConShpChgUID UID或者是标识列//gs_Language 语言(中英文)//l ...

  4. sh_05_函数的参数

    sh_05_函数的参数 def sum_2_num(num1, num2): """对两个数字的求和""" # num1 = 10 # nu ...

  5. 序列式容器————list

    list是一个线性双向链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据).一个前驱指针和一个后驱指针. 它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的 ...

  6. 3D Computer Grapihcs Using OpenGL - 19 Vertex Array Object(顶点数组对象)

    大部分OpenGL教程都会在一开始就讲解VAO,但是该教程的作者认为这是很不合理的,因为要理解它的作用需要建立在我们此前学过的知识基础上.因此直到教程已经进行了一大半,作者才引入VAO这个概念.在我看 ...

  7. eclipse代码自动补全设置

    1.说明 eclipse安装好了之后,在编辑框中输入某个英文字符,默认不自动弹出自动代码选择框,需要手动按下 Alt + / 或者输入的字符为 .  才弹出代码自动补全框.其实eclipse是可以设置 ...

  8. 基本的axios用法

    首先安装axios: 1):npm install 2):npm install vue-axios --save 3):npm install qs.js --save //它的作用是能把json格 ...

  9. [LeetCode]-011-Longest Common Prefix

    Write a function to find the longest common prefix string amongst an array of strings. []=>" ...

  10. Linux shell - 找到进程pid,然后杀掉(jps, grep, awk)

    在应用服务器上,启动一个应用程序F3后,一直挂着,如果想要关闭它话,可以使用jps找到它的pid,然后,使用kill命令杀掉这个pid,例如: $> jps 17337 Jps 6660 Mai ...