版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统的组成外围硬件嵌入式处理器操作系统应用程序软件系统开发环境编译下载和调试系统引导中间软件硬件系统linux编程基础
编写简单的C语言程序,使用gcc编译器将程序编译为可执行程序Qt应用程序设计
利用qt平台,编写可视化的GUIAPPqt应用程序的开发图形用户界面简述
图形用户界面-GUI(GraphicUserInterface)MiniGUI是一种面向嵌入式系统的图形用户界面支持系统,是国内做的较好的自由软件之一.Qt-Trolltech公司最早也是最有名的产品,它最初是作为一个跨平台(Win32、Mac、Unix)的C++GUI库开发的,目前已经成为了一个通用的C++跨平台类库Qt是一个全面的C++应用程序开发框架。Qt包含一个类库和用于跨平台开发及国际化的工具。QT概述Qt类库是一个拥有超过400个C++类,同时不断扩展的库。它封装了用于端到端应用程序开发所需要的所有基础结构。同时还集成数据库,网络,XML,国际化,OpenGL等等。QtDesigner是一个功能强大的GUI布局与窗体构造器,能够快速开发高性能的用户界面。
QtLinguistQt语言家,Qt的国际化工具。QtAssistantQt助手,Qt的帮助文档。Qt/EQt/Embedded是面向嵌入式系统的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C++GUI(图形用户界面)和基于Linux的嵌入式平台开发工具。Qt/EmbeddedAPI可以用于多种开发项目。许多基于Qt的XWindow程序可以非常方便地移植到嵌入式版本,适用于高端PDA等产品。6QtopiaQtopia是为了Linux的PDA、智能电话和其他移动设备设计的一个全面并且可以用户化的应用程序平台和用户界面。它是第一个面向嵌入式Linux的全方位应用程序开发平台,它可以并且已经应用于众多的基于Linux的PDA(个人数字助理)设备和智能电话。
Qt源码下载Qt源码与工具下载地址:http://download.qt.io/archive/Qt代码和开发工具各个版本混乱,总的可以分为不同操作系统的pc版本的和开发板运行版本。pc的开发环境:5.0版本以前没有集成的开发环境,需要从命令行输入命令进行编译和运行。从5.0版本开始就按照操作系统分别下载pc版本的进行安装,集成开发环境qtcreator。嵌入式开发板的代码统一为qt-everywhere-opensource。从Qt5.15开始,开源版本,无论是不是LTS,不再提供编译后的独立安装包,只能在线安装。Qt助手C++初识面向对象编程(Object-orientedProgramming,OOP)C++,JAVA等主流语言都是OOPOOP的重要概念:类-class,每个类都有自己的属性,这些属性称为成员,对成员的处理方法称为成员函数。重点掌握类的使用,理解类的继承。12每一个实体都是对象。具有相同属性和行为的对象集合成类(class)。类是对象的抽象,而对象是类的具体实例(instance)。
按钮对象:按钮的内容、大小,按钮的字体、图案等。针对按钮的各种操作:单击、双击、拖动等。丐帮弟子:打狗棍,袋子,补丁衣服。打狗棍法…。属性:静态特征行为:动态特征类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的运算封装在一起的集合体。inta,b;ButtonbutA,butB;13class
类名{private:
成员数据;
成员函数;public:
成员数据;
成员函数;protected:
成员数据;
成员函数;};class
car{public:
intweight;intlength;intwidth;};分号不能少类的定义-先定义,后使用属性:使用成员数据/成员变量表示行为:成员函数,对数据的操作类名:carpublic表示下面的成员或函数都是类外可以访问的成员变量class的实例化对车定义一个类#include<iostream>usingnamespacestd;class
car{public:intweight;intlength;intwidth;};intmain(){
car
a_car;
cout<<"inputthecar’slength!\n";//printf("inputthecar'slength!\n");
cin>>a_car.length;//scanf("%d",&(a_car.length));
cout<<"inputthecar'swidth!\n";cin>>a_car.width;cout<<"\nlength:"<<a_car.length<<"\nwidth:"<<a_car.width<<endl;//printf("\nlength:%d\nwidth:%d\n",a_car.length,a_car.width,);}相当于stdio.h定义一个变量a_car,类型为car因为length和width都是public,因此可以通过变量直接访问。public改成private试试看?program.cpp编译命令:g++-oprogramprogram.cpp类的成员函数#include<iostream>usingnamespacestd;class
car{public:intweight;intlength;intwidth;voidcal_weight(void);};voidcar::cal_weight(void){
weight=length*(this->width)*100;}成员函数内部直接使用类中的成员变量;也可以加上this->this表示当前的对象的指针成员函数的定义;表示cal_weight是car的成员函数,不能随意调用成员函数声明,放在public下表示什么?类的成员函数的使用intmain(){cara_car;
cout<<"inputthecar’slength!\n";
cin>>a_car.length;
cout<<"inputthecar'swidth!\n";cin>>a_car.width;
a_car.cal_weight();cout<<"\nlength:"<<a_car.length<<"\nwidth:"<<a_car.width<<endl;
cout<<"weight:"<<a_car.weight<<endl;}使用成员函数cal_weight()类的成员函数的使用#include<iostream>usingnamespacestd;class
car{public:intweight;intlength;intwidth;voidcal_weight(void);
void
print_data(void);};voidcar::cal_weight(void){
weight=length*width*100;}voidcar::print_data(){cout<<"\nlength:"<<length<<"\nwidth:"<<
width<<endl;cout<<"weight:"<<
weight<<endl;}intmain(){cara_car;
cout<<"inputthecar’slength!\n";
cin>>a_car.length;
cout<<"inputthecar'swidth!\n";cin>>a_car.width;a_car.cal_weight();a_car.print_data();}通过成员函数print_data封装成员变量,减少对外部成员变量的处理class的认识#include<iostream>usingnamespacestd;class
car{private:intweight;intlength;intwidth;public:voidcal_weight(void);voidprint_data(void);voidset_data(void);};voidcar::cal_weight(void){
weight=length*width*100;}voidcar::print_data(){cout<<"\nlength:"<<length<<"\nwidth:"<<
width<<endl;cout<<"weight:"<<
weight<<endl;}voidcar::set_data(){
cout<<"inputthecar’slength!\n";
cin>>length;//注意这里没有a_car
cout<<"inputthecar'swidth!\n";cin>>width;}intmain(){cara_car;a_car.set_data();a_car.cal_weight();
a_car.print_data();}增加成员函数set_data,至此,所有的成员变量处理可以直接在类中完成,成员直接变为private,外部不可访问#include<iostream>usingnamespacestd;class
car{private:intweight;intlength;intwidth;public:car();~car();voidcal_weight(void);voidprint_data(void);voidset_data(void);};car::car(){weight=0;length=0;width=0;}car::~car(){cout<<"thisis~car,bye!\n";}voidcar::cal_weight(void){……}voidcar::print_data(){……}voidcar::set_data(){…….}intmain(){cara_car;a_car.print_data();
a_car.set_data();a_car.cal_weight();
a_car.print_data();}类的构造函数和析构函数构造函数:函数名与类名相同,该函数不需要调用,自动会在定义变量cara_car;时自动调用析构函数:~car();用于释放成员函数申请的资源,无需调用。任务一1、建议一个矩形类(rect),成员为长,宽,成员函数共有4个:构造函数,输入数据,计算面积和显示面积。主程序调用该类,可从键盘输入长、宽,计算和显示面积。类的继承#include<iostream>usingnamespacestd;class
car{private:intweight;intlength;intwidth;public:car();voidcal_weight(void);voidprint_data(void);voidset_data(void);};car::car(){weight=0;length=0;width=0;}voidcar::cal_weight(void){
weight=length*width*100;}voidcar::print_data(){…….}voidcar::set_data(){
……}classtruck:publiccar{};intmain(){
car
a_car;truckb_car;a_car.set_data();a_car.cal_weight();
a_car.print_data();
b_car.set_data();
b_car.cal_weight();b_car.print_data();}class新类名:public父类新的类完全拥有父类的特点,还可以发展自己的新成员和新函数。类的继承……classtruck:publiccar//货车{public:truck();~turck();voidprint_hp();//打印马力数据private:inthorsepower;//马力};truck::truck(){horsepower=10;}truck::~truck(){}voidtruck::print_hp(){
cout<<"horsepower:<<horsepower<<endl;}intmain(){
car
a_car;truckb_car;a_car.set_data();a_car.cal_weight();
a_car.print_data();
b_car.set_data();
b_car.cal_weight();b_car.print_data();
b_car.print_hp();}子类可以有自己的成员变量和函数子类的实例可以使用父类的公有变量和函数父类不能使用子类自己的成员变量和函数类的继承……classtruck:publiccar//货车{public:truck();~turck();voidprint_hp();//打印马力数据voidset_hp();private:inthorsepower;//马力};truck::truck(){horsepower=10;}truck::~truck(){}voidtruck::set_hp();{cout<<“inputhp:\n”;cin>>hp;}voidtruck::print_hp(){
cout<<"horsepower:<<horsepower<<endl;}intmain(){
car
a_car;truckb_car;a_car.set_data();a_car.cal_weight();
a_car.print_data();b_car.set_data();b_car.cal_weight();b_car.set_hp();
b_car.print_data();b_car.print_hp();}子类可以有自己的成员变量和函数子类的实例可以使用父类的公有变量和函数父类不能使用子类自己的成员变量和函数类的继承……classtruck:publiccar//货车{public:truck();~turck();voidprint_hp();//打印马力数据voidset_hp();private:inthorsepower;//马力};…voidtruck::set_hp(){cout<<“inputhp:\n”;cin>>horsepower;}voidtruck::print_data(){car::print_data();print_hp();}voidtruck::print_hp(){
cout<<"horsepower:<<horsepower<<endl;}intmain(){
car
a_car;truckb_car;a_car.set_data();a_car.cal_weight();
a_car.print_data();b_car.set_data();b_car.cal_weight();b_car.set_hp();b_car.print_data();}子类中的函数可以与父类的函数重名,调用时会根据类型各自调用。子类调用父类的同名函数时,在函数的前面加上类型名任务二
在rect类的基础上分别创建子类长方体(cuboic)和四棱锥(pyramid)两个子类都可以增加成员变量高,增加成员函数计算体积和显示体积,计算和显示表面积。
主程序调用该类,可从键盘输入长、宽、高。指针指针—记录内存地址的方式明德321明德322明德323明德324地址18电子11000100110021003地址3单片机实验室a变量#include<iostream>usingnamespacestd;intmain(){inta;
a=3;cout<<“a=”<<a<<endl;
return0;}&--取地址符b是一个指针(*),其数值是地址,该地址中放的数值类型是int查看b地址中的数值是?
int*b;cout<<“&a=”<<&a<<endl;b=&a;cout<<“b=”<<
b<<endl;cout<<“*b=”<<*b<<endl;18电子2指定b记录的是a的地址指针—记录内存地址的方式#include<iostream>usingnamespacestd;intmain(){inta;
a=3;cout<<“a=”<<a<<endl;
cout<<“*b=”<<<<endl;return0;}
int*b;cout<<“&a=”<<&a<<endl;b=&a;cout<<“b=”<<
b<<endl;
*b
int*b;
*b指针变量的定义:
类型*变量名称通过指针取值:*变量*表示取值运算符。指针#include<iostream>usingnamespacestd;intmain(){inta[5]={10,20,30,40,50};
int*ptr;inti;ptr=&(a[2]);cout<<*ptr<<endl;
cout<<*(ptr+1)<<endl;cout<<(*ptr)+1<<endl;ptr++;cout<<*ptr<<endl;
*ptr=60;
for(i=0;i<5;i++)cout<<a[i]<<endl;
ptr=a;cout<<*ptr<<endl;return0;}变量指针的使用变量成员的使用方式:变量名.成员名a.length=1;a.length=2;a.cal_weight();car
a;class
car{public:intweight;intlength;intwidth;public:car();voidcal_weight(void);voidprint_data(void);voidset_data(void);};指针变量的成员使用方式:指针变量名->成员名ptra->length=1;ptra->length=2;ptra->cal_weight();car
*ptra=&a;;#include<iostream>usingnamespacestd;class
car{private:intweight;intlength;intwidth;public:car();~car();voidcal_weight(void);voidprint_data(void);voidset_data(void);};car::car(){weight=0;length=0;width=0;}car::~car(){cout<<“thisis~car,bye!\n”;}voidcar::cal_weight(void){……}voidcar::print_data(){……}voidcar::set_data(){…….}intmain(){cara;car*ptra=&a;a.set_data();a.cal_weight();a.print_data();ptra->print_data();}指针的使用a与ptrb所指向的内存是相同的内存块内存分配new:申请一块内存delete:释放一块内存使用方法:
指针变量=new类型;指针变量=new类型(初值);指针变量=new类型[num];int*p=newint;int*b=newint(100);car*ptrc=newcar;申请一块内存,无初始值申请一块内存,有初始值申请num个空间成功则返回内存地址值,失败返回NULL.delete指针变量;delete[]指针变量;deletep;deleteb;deleteptrc;有申请必有释放否则系统内存会耗尽!#include<iostream>usingnamespacestd;class
car{private:intweight;intlength;intwidth;public:car();~car();voidcal_weight(void);voidprint_data(void);voidset_data(void);};car::car(){weight=0;length=0;width=0;}car::~car(){cout<<“thisis~car,bye!\n”}voidcar::cal_weight(void){……}voidcar::print_data(){……}voidcar::set_data(){…….}intmain(){cara;car*ptrb=newcar;a.set_data();a.cal_weight();a.print_data();
ptrb->set_data();ptrb->cal_weight();ptrb->print_data();deleteptrb;}指针的使用a与ptrb所指向的内存是不同的内存块a是静态局部变量,a的空间程序结束是自动回收ptrb是动态申请的内存,必须使用delete回收空间Qt是一个全面的C++应用程序开发框架。Qt包含一个类库。拥有超过400个C++类,同时不断扩展的库。它封装了用于端到端应用程序开发所需要的所有基础结构。QApplicationQWidgetQMainWindowQDialogQPushbutonQLabel…Qt初识部件(控件):可视化的矩形的图形对象,如按钮、对话框、滚动条等。可以理解为将某些类可视化,方便编程。QWidgetQMainWindowQDialogQPushbutonQLabel…所有部件都来继承自Qwidget。主部件:一般是一个窗口(Qwidget,QMainWindow,Qdialog等),可以用来放置其他部件。当主部件关闭则整个程序关闭。Qt初识搭建QT/Embedded的开发环境qmakeqmake是Trolltech公司用于为不同平台和编译器生成Makefile的工具。使用qmake工具,开发者可以根据源程序创建项目文件,并且由项目文件生成Makefile。不同系统的qt平台有不同的qmake工具,使得开发者只需专注代码的编写。qmakePC端的qmake:/opt/Qt5.3.2/5.3/gcc_64/bin/qmakearm开发板的qmake:/opt/qt-4.7.1/bin/qmake在cpp源程序所在的目录下运行对应的qmake命令,可生成对应平台的makefile生成makefile后输入make,可生成对应的可执行程序最原始的Qt程序开发#include<QApplication>#include<QDialog>intmain(intargc,char*argv[]){
QApplicationapp(argc,argv);QDialogdq;
dq.show();returnapp.exec();}使用了QApplication类使用了QDialog类用于函数入口参数的处理,必须!将控制权交给qt,必须!创建了一个Dialog控件!显示对话框!最原始的Qt程序开发1、生成项目文件.pro/opt/Qt5.3.2/5.3/gcc_64/bin/qmake–project2、版本控制在项目文件*.pro文件上添加一句话:greaterThan(QT_MAJOR_VERSION,4):QT+=widgets表示QT版本大于4,则需要添加widgets模块。3、生成Makefile/opt/Qt5.3.2/5.3/gcc_64/bin/qmake4、生成可执行程序make5、执行程序#include<QApplication>#include<QDialog>#include<QLabel>intmain(intargc,char*argv[]){QApplicationapp(argc,argv);QDialogdq;
dq.resize(200,300);dq.setWindowTitle("hello");QLabellabel1(&dq);label1.move(20,40);label1.setText("helloeverybody!");
label1.setFont(QFont("Timers",28,QFont::Bold));
dq.show();returnapp.exec();}修改对话框的大小,标题增加一个标签,并修改标签的文字字体和大小最原始的Qt程序开发qtcreator中的配置qtcreator中的配置qtcreator中的配置qtcreator中的增加项目的编译版本选择项目的编译版本运行环境选择:PC端:选择DesktopQt5.3GCC64bit开发板端:选择Qt4.7.1调试版本:Debug发布版本:Release真正的第一个qt程序新建空项目点击”新建项目”->其他项目->空的QT项目确定项目的存放位置以及使用的编译器和库版本在项目文件qt_文件上添加一句话:greaterThan(QT_MAJOR_VERSION,4):QT+=widgets表示QT版本大于4,则需要添加widgets模块。版本控制新建main.cpp文件在main.cpp输入代码#include<QApplication>#include<QDialog>#include<QLabel>intmain(intargc,char*argv[]){
QApplicationapp(argc,argv);QDialogdq;dq.resize(200,300);dq.setWindowTitle("hello");QLabellabel1(&dq);label1.move(20,40);label1.setText("helloeverybody!");
label1.setFont(QFont("Timers",28,QFont::Bold));
dq.show();returnapp.exec();}请创建一个窗口:大小300*400,标题为info窗口中显示两行文字:自己的姓名自己的学号并查阅资料,两行文字设置为不同的字体和大小QT任务1实现可视化的界面设计--使用QT提供的设计师界面类根据需要选择不同的模板,并填写类的名称新建的对话框界面新建的类MainDialog为新建的类,头文件为maindialog.h,源文件为maindialog.cpp对应的界面文件为maindialog.ui选中maindialog.ui可进入设计界面修改main.cpp主函数#include<QApplication>#include<QDialog>#include<QLabel>intmain(intargc,char*argv[]){QApplicationapp(argc,argv);
MainDialogdq;dq.show();returnapp.exec();}系统启动的对话框改为新的类点击编辑运行,此时应用程序改
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上半年贵州毕节试验区杂志社招聘工作人员重点基础提升(共500题)附带答案详解-1
- 二零二五年度房屋买卖合同中地震安全评估与应对措施3篇
- 2025年上半年财达证券股份限公司北京分公司承德平泉部招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年衡阳市衡阳县招考中小学教师易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年芜湖新华书店限公司外包服务人员招聘13人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年老河口金剑国资本投资集团限公司员工招聘【4人】易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年红河州泸西县事业单位招考紧缺人才易考易错模拟试题(共500题)试卷后附参考答案
- 二零二五版服务器租赁与远程监控服务合同2篇
- 2025年校车维修保养及配件供应合同3篇
- 2025年合资协议书格式范本示例
- 人教版小学数学(2024)一年级下册第一单元 认识平面图形综合素养测评 B卷(含答案)
- 企业年会摄影服务合同
- 电商运营管理制度
- 二零二五年度一手房购房协议书(共有产权房购房协议)3篇
- 2025年上半年上半年重庆三峡融资担保集团股份限公司招聘6人易考易错模拟试题(共500题)试卷后附参考答案
- 城市公共交通运营协议
- 内燃副司机晋升司机理论知识考试题及答案
- 2024北京东城初二(上)期末语文试卷及答案
- 2024设计院与职工劳动合同书样本
- 2024年贵州公务员考试申论试题(B卷)
- 电工高级工练习题库(附参考答案)
评论
0/150
提交评论