1、qt

命令行应用程序:

命令行应用程序是一种基于顺序执行结构的可执行程序,程序执行过程中不需要与用户产生交互,程序执行后给出最终的运行结果。

gcc a.c b.c c.c //编译三个c程序

编译过程中不产生用户交互,编译结束后或者生成可执行程序或者给出错误信息。

ls 就是一个命令行程序,列出目录和文件

main->function1()->function2()

特点:程序的运行有固定的开始和固定的结束。

命令行应用程序使用于:单任务场合,无交互或简单交互场合,服务器应用场合

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

图形界面应用程序的诞生:随着计算机技术的发展,计算机走进日常生活,计算机程序开始需要处理各个领域中的问题,计算机用户已经不再是专业的计算机工作者。

如何走进生活呢?

图形界面应用程序是一种基于消息驱动模型的可执行程序,程序的执行依赖于用户的交互工程,程序执行过程中实时响应用户操作。一般情况下程序执行后不会主动退出。

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

main() 定义主窗口,创建主窗口,创建主窗口中的元素,显示主窗口,进入消息循环。

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

用户操作->(系统内核)系统内核->系统消息->应用程序(消息处理函数)。

图形界面 应用程序适用于:多任务的场合,强用户交互的场合,非专业计算机用户。

图形界面应用程序是当代计算机系统中的主要程序类型。

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

当代软件产品:用户界面交互层(qt,mfc,.net)《=》网络更新模块(命令行程序)。数据库管理模块(命令行程序)。虚拟机引擎模块(命令行程序)小结:

命令行应用程序        图形界面应用程序

基于顺序执行结构    基于消息驱动模型    

  弱交互执行            由用户触发运行    

   主动结束              由用户触发结束

2、GUI程序实例分析

现代操作系统支持GUI界面:现代操作系统提供原生SDK支持GUI程序开发,GUI程序开发是现代操作系统上的主流技术,不同操作系统上的GUI开发原理相同,不同操作系统上的GUI SDK不同。

GUI程序在运行时会创建一个消息队列,系统内核将用户操作翻译成对应的程序消息,程序在运行过程中需要实时处理队列中的消息,当队列中没有消息时,程序将处于停滞状态。

用户操作-》操作系统内核-》程序消息-》GUI应用程序。

GUI程序开发:

在代码中用程序创建窗口及窗口元素,在消息处理函数中根据程序消息做出不同相应

经典GUI程序开发模式:

可视化界面开发(通过所见即所得的方式画出界面,开发环境自动生成对应的程序代码)

消息映射(程序中将具体消息映射到指定函数,当消息触发时,函数被调用)

多数操作系统以c的函数的方式提供GUI SDK

以Windows操作系统为例:

RegisterClass         向系统注册GUI窗口式样

CreateWindow     创建窗口或窗口元素

ShowWindow        在屏幕上显示创建好的窗口

UpdateWindow    刷新屏幕上的窗口

GetMessage        获取程序消息队列中的消息

TranslateMessage    翻译系统消息

DispatchMessage    将消息发送到窗口处理函数

小结:现代操作系统提供原生SDK支持GUI程序开发,不同操作系统上的GUI SDK不同,不同操作系统上GUI开发原理相同。

GUI程序开发包括:在代码中用程序创建窗口及窗口元素,在消息处理函数中根据程序消息做出不同相应。

3、GUI用户界面是由固定的窗口元素所构成的

主窗口,菜单栏,工具栏,标签,文本框,按钮。

操作系统提供了创建用户界面元素所需要的函数。各种功能不同的函数依次调用,从而创建出界面元素,操作系统提供的原生函数无法直接映射到界面元素。

如何直观的将界面元素的概念直接映射到程序中?

GUI应用程序是为解决非科学计算问题而诞生的,GUI应用程序使用于非专业的日常生活领域。

面向过程程序设计方法学不适合GUI程序设计,面向对象程序设计方法学更适合GUI程序设计。

用面向对象方法学看待GUI界面元素,所有的界面元素都可以看做实际的对象,GUI用于界面是由各不相同的对象组成的,

主窗口对象:菜单对象,按钮对象,文本框对象。

GUI开发非常适用面向对象方法学:将界面元素定义为对应的类,通过抽象和封装可以隐藏界面元素的细节,程序的创建过程就是组合不同界面元素对象的过程。

Widget<-MainWindow, PushButton

QT是利用面向对象方法学开发的一套GUI组件库,将不同操作系统的GUI细节封装与类的内部,QT提供一套跨平台的类用于开发GUI程序,遵循经典的GUI应用程序开发模式。

小结:GUI程序开发更适合采用面向对象方法学,所有的界面元素都可以看作实际的对象,GUI用户界面是由各不相同的对象组成的,QT是利用面向对象方法学开发的一套GUI组件库,他将GUI细节封装于类的内部,具有跨平台的特性。

4、QT是一套跨平台的GUI开发库,一套c++集成开发环境,一套开源的殿堂级架构技术教程。

#include <Qapplication>

#include <QMainWindow>

#include <QPushButton>

int main(int argc,char* argv[])

{QApplication a(argc,argv);

 QMainWindow w;

QPushButton b(&w);

b.setText("Hello QT!");

w.show();

return a.exec();}

通过命令行的方式编译QT源程序:启动QT命令行,进入源程序所在目录

命令:

1、qmake-project  //根据目录中的源码生成工程文件

2、qmake  //根据工程文件生成makefile文件

3、make //根据makefile进行编译

QT Creater 是一套可视化的集成开发环境,使用QT Creater可以高效的进行QT开发,QT Creater提供了强大的代码编辑功能,提供了强大的调试功能。

调试的基本方法:

log调试法:在代码中加入一定的打印语句,打印程序状态和关键变量的值。

断点调试法:在开发环境中的对应代码行加上断点,当程序运行到断点行时,程序暂停运行,需要时可加上条件断点,当条件满足才暂停程序的运行。

QT是一套跨平台的c++界面开发库,可以通过命令行的方式开发QT应用程序,也可以通过QT Creater进行QT开发,QT Creater支持log调试和断点调试法。

5、QT Creater 以工程项目的方式对源码进行管理

一个QT Creater 工程包含不同类型的文件

.pro 项目描述文件

.pro.user用户配置描述文件

.h 头文件 .cpp源文件

.ui界面描述文件

资源文件(图片,音频,等)

.pro 项目描述文件的基本构成:

#-注释起始符

QT-模块声明

TARGET-可执行文件名

TEMPLATE-程序模板声明

SOURCES-源码文件声明

HEADERS-头文件声明

FORMS-界面文件声明

RC_FILE-资源文件声明

.pro项目描述文件中的高级变量:

INCLUDEPATH-头文件搜索路径

CONFIG-设定项目的配置信息和编译选项。

LIBS-添加第三方库文件

DEFINES-定义编译宏

CONFIG用于设定项目的配置信息和编译选项,常用选项:

debug-构建debug版本的可执行程序

release-构建release版本的可执行程序

debug_and_release-同时构建debug板和release板

warn_on-尽可能多的输出警告信息

warn_off-不输出警告信息

.pro文件的本质为Qt中的makefile文件。

.pro->qmake->makefile for windows, makefile for linux makefile for mac OS

项目文件:

一般来说,项目文件中的描述都使用相对路径,而相对路径是相对于项目文件本身而言,QT Creater将项目文件作为目标文件

注意:

1、QT Creater在打开项目文件的同时会生成.pro.user文件,

2、.pro.user文件包含一些与qt相关的本地配置信息,

3、当需要在不同计算机之间移动项目源码时,建议删除.pro.user文件。

工程中的概念:

构建(build):对项目中的所有文件进行编译,最终生成可执行程序。

Debug板:可以进行程序调试的构建版本(调试板):

可执行程序中包含调试信息,运行效率不高。

Release板:最终发布的应用程序构建版本,无调试信息,运行效率高。

QT Creater以工程项目的方式对源码进行管理,一个QT Creater工程包含不同类型的文件,.pro文件用于配置和组织整个项目的相关信息,.pro文件是Qt中与平台无关的Makefile文件,QT Creater提供了开发所必备的快捷高效的功能。

6、窗口组件及窗口类型

图形用户界面由不同的窗口和窗口组件构成

<QtGui>头文件包含窗口组件,对应Qt中的GUI模块,Qt以组件对象的方式构建图形用户界面。

组件的类型:

容器类(父组件):用于包含其他的界面组件。

功能类(子组件):用于实现特定的交互功能、

Qt中没有父组件的顶级组件叫窗口。

QWidget类继承自QObject类和QPaintDevice类:QObject是所有支持QT对象模型的基类,QpaintDevice是Qt中所有可绘制组件的基类。

QWidget能够绘制自己和处理用户的输入,是QT中所有窗口组件类的父亲(super class),是所有窗口组件的抽象,QT中的每个窗口组件都是一个QWidget,QWidget类对象常作为父组件或顶级组件使用。

   QWidget w;

    w.setWindowTitle("D,T.SOFE");

QLabel用于显示一个提示性的字符串,是功能性组件,一般需要父组件作为容器,可以作为窗口存在,但没有意义

QWidget w;//生成QWidget对象,顶级组件

QLabel l(&w);//生成QLabel对象,其父组件为QWidget

/*设置QLabel组件的显示字符串*/

l.setText("this is a label control");

窗口类型:qt中可以根据需要定制窗口式样:窗口类型:

Qt::Dialog-对话框类型

Qt::Window-主窗口类型

Qt::SplashScreen-启动画面类型

窗口标志:

Qt::WindowStaysOnTopHint //顶级窗口,始终在顶层

Qt::WindowContextHelpButtonHint //最大化最小化换为帮助

qt以组件对象的方式构建图形用户界面,QWidget类是所有用户界面组件的父类,QWidget类对象常作为父组件或顶级组件使用,Qt中可以根据需要定制窗口式样,QLabel用于显示一个提示性的字符串。

#include <QtGui>
#include "Widget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w(NULL, Qt::Window|Qt::WindowStaysOnTopHint|Qt::WindowContextHelpButtonHint);
    QLabel l(&w);
    l.setText("I'm a label control.");
    w.setWindowTitle("D.T.Software");
    w.resize(400, 300);
    w.show();
    return a.exec();
}

7、坐标系统

GUI操作系统都有特定的坐标系统,图形界面程序在坐标系统中进行窗口和部件的定位。

定位类型:顶级窗口部件的定位,窗口内部件的定位,窗口部件的大小设置。

qt使用统一的坐标系统定位窗口部件的位置和大小,qt部件类提供成员函数在坐标系统中进行定位,QWidget类提供了窗口部件所需的坐标系统成员函数。

QWidget类中的坐标系统成员函数:

x(),y(),width(),height(),

geometry():x(),y(),width(),height(),(前两个与上边不一样,后两个一样)

frameGeometry():x(),y(),width(),height(),(前两个与最上边一样,后两个与上边不一样)

geometry(),frameGeometry()中的几何数据必须在show()调用后才有效。

QWidget类提供了成员函数:

改变窗口部件的大小:

void resize(int w, int h)

void resize(const QSize &)

改变窗口部件的位置:

void move (int x, int y)

void move(const QPoint &)

QPushButton 用于接受用户点击事件,能够显示提示性字符串,是功能性组件,需要父组件作为容器,能够在父组件中进行定位。

    QWidget w;
    QPushButton b(&w);   // 生成 QPushButton对象, 其父组件为 QWidget
    b.setText("Button"); // 设置显示的字符串
    b.move(10, 10);      // 移动到坐标 (10, 10)
    b.resize(100, 50);   // 设置大小 width = 100, height = 25

小结:QT中的几何坐标以左上角为原定

水平为x轴,从左向右为正向。

垂直为y轴,从上到下为正向。

QT中的GUI组件以左上角进行定位。

QT中的GUI组件可以在坐标系统中进行大小设置。

#include <QtGui/QApplication>
#include <QPushButton>
#include <QDebug>
#include "MainWindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    QPushButton b(&w);   // 生成 QPushButton对象, 其父组件为 QWidget
    QPushButton b1(&w);
    b.setText("Button"); // 设置显示的字符串
    b.move(10, 10);      // 移动到坐标 (10, 10)
    b.resize(100, 50);   // 设置大小 width = 100, height = 25
    b1.setText("Button"); // 设置显示的字符串
    b1.move(120, 10);      // 移动到坐标 (120, 10)
    b1.resize(100, 50);   // 设置大小 width = 100, height = 25
    w.resize(100, 100);
    w.move(120, 120);
    w.show();
    qDebug()<<"QWidget:";
    qDebug()<<w.x();
    qDebug()<<w.y();
    qDebug()<<w.width();
    qDebug()<<w.height();
    qDebug()<<"QWidget::geometry()";
    qDebug()<<w.geometry().x();
    qDebug()<<w.geometry().y();
    qDebug()<<w.geometry().width();
    qDebug()<<w.geometry().height();
    qDebug()<<"QWidget::frameGeometry()";
    qDebug()<<w.frameGeometry().x();
    qDebug()<<w.frameGeometry().y();
    qDebug()<<w.frameGeometry().width();
    qDebug()<<w.frameGeometry().height();
    return a.exec();

}

猜你喜欢

转载自blog.csdn.net/ws857707645/article/details/80494813
今日推荐