《嵌入式 GUI 开发》 学习总结
文章目录
1.简介
1.1下载安装
下面从Qt和Qt Creator的下载与安装讲起,正式带读者开始Qt的学习之旅。需要说明的是,本书使用的开发平台是Windows 7桌面平台,主要讲解Windows版本的Qt Creator。为了避免由于开发环境的版本差异而产生不必要的问题,建议在学习本书前先下载和本书相同的软件版本。本书使用Qt5.6.1版本,其中包含了Qt Creator 4.0. 1。
地址: http://download. qt. io/official_ releases/qt/5. 6/5.6. 1-1/。
下载文件:qt-opensource windows x86- mingw492-5. 6.1-1. exe。
下载完成后双击qt-opensource- windows- x86- mingw492 -5. 6.1-1. exe,首先出现的是欢迎界面,单击“下一步”按钮,并选择登陆或者注册Qt账号。这一步并不影响程序的安装,所以直接单击Skip按钮跳过。在选择组件界面可以选择安装- - -些模块,单击一个组件 ,则可以在右 侧显示该组件的详细介绍,建议初学 者保持默认选择,如图所示。后面的过程按照默认设置即可。
1.2环境介绍
下面先简单介绍Qt Creator的界面组成,然后演示一个示例程序,并简单介绍Qt Creator的环境。
打开Qt Creator,界面如图1-2所示。它主要由主窗口区、菜单栏、模式选择器、构建套件选择器、定位器和输出窗格等部分组成,简单介绍如下:
1.菜单栏(Menu Bar)
这里有8个菜单选项,包含了常用的功能菜单:
➢文件菜单。其中,包含了新建、打开和关闭项目和文件、打印文件和退出等基本功能菜单。
➢编辑菜单。这里有撤销、剪切、复制、查找和选择编码等常用功能菜单,高级菜单中还有标示空白符、折叠代码、改变字体大小和使用vim风格编辑等功能菜单。
➢构建菜单。包含构建和运行项目等相关的菜单。
➢调试菜单。包含调试程序等相关的功能菜单。
➢Analyze菜单。包含QML分析器、Valgrind内存和功能分析器等相关菜单。
➢工具菜单。这里提供了快速定位菜单、外部工具菜单等。这里的选项菜单中包含了Qt Creator各个方面的设置选项:环境设置、文本编辑器设置、帮助设置、构建和运行设置、调试器设置和版本控制设置等。在环境设置的Interface 页面可以将主题Theme设置为Classic,这样就可以使用以前的经典QtCreator主题了。
➢控件菜单。包含了设置窗口布局的一-些菜单,如全屏显示和隐藏边栏等。
➢帮助菜单。包含Qt帮助、Qt Creator版本信息、报告bug和插件管理等菜单。
2.模式选择器( Mode Selector)
Qt Creator包含欢迎、 编辑、设计、调试(Debug)、项目和帮助6个模式,各个模式完成不同的功能,也可以使用快捷键来更换模式,各自对应的快捷键依次是Ctrl+数字1~6。
➢欢迎模式。图1-2就是欢迎模式,主要提供了一些功能的快捷人口,如打开帮助教程、打开示例程序、打开项目、新建项目、快速打开以前的项目和会话、联网查看Qt官方论坛和博客等。Projects 页面显示了最近打开的项目列表,在这里也可以创建一个新项目或者打开一个已有项目;示例页面显示了Qt自带的大量示例程序,并提供了搜索栏从而实现快速查找;教程页面提供了一些视频教程资源。
➢编辑模式。其主要用来查看和编辑程序代码,管理项目文件。Qt Creator中的编辑器具有关键字特殊颜色显示、代码自动补全、声明定义间快捷切换、函数原型提示、F1键快速打开相关帮助和全项目中进行查找等功能。也可以在“工具→选项"菜单项中对编辑器进行设置。
➢设计模式。这里整合了Qt设计师的功能。可以设计图形界面,进行部件属性设置、信号和槽设置、布局设置等操作。如果是在Qt Quick项目中,还可以激活Quick设计器,那是全新的设计器界面。可以在“工具→选项"菜单项中对设计师进行设置。设计模式在第2章会讲到。
➢调试模式。支持设置断点、单步调试和远程调试等功能,包含局部变量和监视器、断点、线程以及快照等查看窗口。可以在“工具-→选项"菜单项中设置调试器的相关选项。调试模式在第3章会讲到。
➢项目模式。包含对特定项目的构建设置、运行设置、编辑器设置、代码风格设置和依赖关系等页面。构建设置中可以对项目的版本、使用的Qt版本和编译步骤进行设置;编辑器设置中可以设置文件的默认编码;在代码风格设置中可以设置自己的代码风格。也可以在“工具→选项”菜单项中对项目进行设置。项目模式在第2章会讲到。
➢帮助模式。在帮助模式中将Qt助手整合了进来,包含目录、索引、查找和书签等几个导航模式,可以在帮助中查看Qt和Qt Creator的各方面信息。可以在“工具→选项”菜单中对帮助进行相关设置。
3.构建套件选择器(Kit Selector)
构建套件选择器包含了目标选择器(Targetselector)、运行按钮(Run)、调试按钮(Debug)和构建按钮(Building)4个图标。目标选择器用来选择要构建哪个项目、使用哪个Qt库,这对于多个Qt库的项目很有用。还可以选择编译项目的debug版本或是release版本。运行按钮可以实现项目的构建和运行;调试按钮可以进人调试模式,开始调试程序;构建按钮完成项目的构建。
4.定位器(Locator)
Qt Creator中可以使用定位器来快速定位项目、文件.类、方法、帮助文档以及文件系统。可以使用过滤器来更加准确地定位要查找的结果。可以在“工具-→选项"菜单项中设置定位器的相关选项。定位器在第4章会讲到。
5.输出窗格(Output panes)
输出窗格包含了问题、搜索结果(Search Results)、 应用程序输出、编译输出、De-buggerConsole、概要信息、版本控制(Version Control)7个选项,它们分别对应一个输出窗口,相应的快捷键依次是Alt十数字1~7。问题窗口显示程序编译时的错误和警告信息,搜索结果窗口显示执行了搜索操作后的结果信息,应用程序输出窗口显示应用程序运行过程中输出的所有信息,编译输出窗口显示程序编译过程输出的相关信息,版本控制窗口显示版本控制的相关输出信息。
1.2.1运行一 一个示例程序
1.2.2帮助模式
1.3Qt工具简介
1.3.1 Qt Assistant(Qt助手)
Qt Assistant是可配置且可重新发布的文档阅读器,可以方便地进行定制,并与Qt应用程序一起重新发布。Qt Assistant 已经被整合进Qt Creator,就是前面介绍的Qt帮助。它的功能有:
➢定制Qt Assistant并与应用程序一起重新发布。
➢快速查找关键词、全文本搜索、生成索引和书签。
➢同时为多个帮助文档集合建立索引并进行搜索。
➢在本地存放文档或在应用程序中提供在线帮助。
Qt Assistant的定制和重新发布会在第9章中讲到。
1.3.2 Qt Designer(Qt设计师)
Qt Designer是强大的跨平台GUI布局和格式构建器。由于使用了与应用程序中将要使用的相同部件,可以使用屏幕上的格式快速设计、创建部件以及对话框。使用Qt Designer创建的界面样式功能齐全并可以进行预览,这样就可确保其外观完全符合要求。功能和优势有:
➢使用拖放功能快速设计用户界面。
➢定制部件或从标准部件库中选择部件。
➢以本地外观快速预览格式。
➢通过界面原型生成C十+或Java代码。
➢将Qt Designer与Visual Studio或Eclipse IDE配合使用。
➢使用Qt信号与槽机制构建功能齐全的用户界面。
QtDesigner或者说QtCreator的设计模式会在后面的章节中经常使用,且已经被整合到了QtCreator中。前面所说的设计模式就是使用的QtDesigner,这会在下–章中讲到。这里要说明的是本书中Qt设计器和Qt设计模式均指集成在Qt Creator中的Qt Designer,而Qt设计师指单独的Qt Designer。
1.3.3 Qt Linguist(Qt语言家)
Qt Linguist提供了一套加速应用程序翻译和国际化的工具。Qt使用单一的源码树和单一的应用程序二进制包就可以同时支持多个语言和书写系统,主要功能有:
➢收集所有UI文本,并通过简单的应用程序提供给翻译人员。
➢语言和字体感知外观。
➢通过智能的合并工具快速为现有应用程序增加新的语言。
➢Unicode编码支持世界上大多数字母。
➢运行时可切换从左向右或从右向左的语言。
➢在一个文档中混合多种语言。
可以使用Qt Linguist来使应用程序支持多种语言,这将会在后面的第9章中具体
介绍。
2.Hello World
2.1编写 Hello World程序
2.2程序的运行与发布
2.3helloworld程序源码与编译过程详解
2.4项目模式和项目文件介绍
3.窗口部件
3.1QWidget
关系图:
3.2dialog
3.3其他窗口部件
4.布局管理
5.应用程序主窗口
6.事件系统
6.1鼠标事件和滚轮事件
6.2键盘事件
6.3定时器事件与随机数
这里参考人家的CSDN博客:
7.Qt对象模型与容器类
7.1信号和槽
7.1.1信号和槽机制概述
信号和槽用于两个对象之间的通信。信号和槽机制是Qt的核心特征,也是Qt不同于其他开发框架的最突出特征。在GUI编程中,当改变了一个部件时,总希望其他部件也能了解到该变化。更一般来说,我们希望任何对象都可以和其他对象进行通信。例如,用户单击了关闭按钮,则希望可以执行窗口的close()函数来关闭窗口。为了实现对象间的通信,一些工具包中使用了回调(callback)机制,而在Qt中使用了信号和槽来进行对象间的通信。当一个特殊的事情发生时便可以发射一个信号,比如按钮被单击就发射clicked()信号;而槽就是一个函数,它在信号发射后被调用来响应这个信号。Qt的部件类中已经定义了一些信号和槽,但是更常用的做法是子类化部件,然后添加自定义的信号和槽来实现想要的功能。
7.1.2典例
下面通过一个简单的例子来进一步讲解信号和槽的相关知识。这个例子实现的效果是:在主界面中创建一个对话框,在这个对话框中可以输入数值,当单击“确定"按钮.时关闭对话框并且将输人的数值通过信号发射出去,最后在主界面中接收该信号并且显示数值。程序的运行效果如图7-2所示。本小 节采用的项目源码路径:src\07\7 - 1\mysignalslot。新建Qt Widgets 应用,项目名称为mysignalslot,基类选择QWidget,类名保持Widget不变。项目建立完成后,向项目中添加新文件,模板选择Qt分类中的“Qt设计师界面类”,界面模板选择Di-
alogwithoutButtons,类名设置为MyDialog。完成后在mydialog.h文件中添加代码来声明一个信号:
class MyDialog : public QDialog
{
Q_OBJECT //必须在类声明的开始处添加该宏
public:
explicit MyDialog QWidget * parent = 0);
~MyDialog();
private:
Ui::MyDialog * ui;
signals:
void dlgReturn(int) ; //自定义的信号
};
声明一个信号要使用signals关键字,在signals前面不能用public、private和pro-tected等限定符,因为信号默认是public函数,可以从任何地方进行发射,但是建议只在定义该信号的类及其子类中发射该信号。信号只用声明,不需要也不能对它进行定,义实现。还要注意,信号没有返回值,只能是void类型的。因为只有QObject类及其子类派生的类才能使用信号和槽机制,这里的MyDialog类继承自QDialog类,QDia-log类又继承自QWidget类,QWidget类是QObject类的子类,所以这里可以使用信号和槽。不过,使用信号和槽还必须在类声明的最开始处添加Q_ OBJECT宏,在这个程序中,类的声明是自动生成的,已经添加了这个宏。双击mydialog. ui文件进入设计模式,在界面中添加一个Spin Box部件和一个PushButton部件,将pushButton的显示文本修改为“确定”。然后转到pushButton的单击信号clicked()对应的槽,更改如下:
单击“确定”按钮便获取spinBox部件中的数值,然后使用自定义的信号将其作为参数发射出去。发射一个信号要使用emit关键字,比如程序中发射了dlgReturn()信号。然后到widget. h文件中添加自定义槽的声明:
槽就是普通的C++函数,可以像-般的函数一样使用。声明槽要使用slots 关键字,一个槽可以是private、public或者protected类型的,槽也可以被声明为虚函数,这与普通的成员函数是一样的。槽的最大特点就是可以和信号关联。下面打开widget. ui文件,向界面上拖入一个Label部件,更改其文本为“获取的值是:”。然后进入widget. cpP文件添加头文件井include“mydialog. b" ,再在构造函数中添加代码:
这里创建了一个MyDialog实例dlg,并且使用Widget 作为父部件。然后将MyDialog类的dlgReturn()信号与Widget类的showValue()槽进行关联。下面添加自定义槽的实现,这里只是简单地将参数传递来的数值显示在了标签上。
7.1.3信号和槽的关联
7.2容器类
8.界面外观
8.1样式表
8.1.1使用代码设置样式表
8.1.2在设计模式中设置样式表
先注释掉上面添加的代码,然后进入设计模式。在界面上右击,在弹出的级联菜单中选择“改变样式表”,这时会出现编辑样式表对话框,在其中输人如下代码:
注意,光标留在第-一个大括号后。然后单击上面“添加颜色”选项后面的下拉箭头,则在弹出的列表中选择background-color项,如图8-2所示。这时会弹出选择颜色对话框,可以随便选择-一个颜色,然后单击OK按钮,则自动添加代码:
根据选择颜色的不同,rgb()中参数的数值也会不同。可以看到,这里设置样式表不仅很便捷而且很直观,不仅可以设置颜色,还可以使用图片,使用渐变颜色或者更改字体。相似的,可以再设置QSlider的背景色,添加完成后如图8-3所示。在设计模式有时无法正常显示设置好的样式表效果,不过运行程序后会正常显示的。这里是在MainWindow界面上设置了样式表,当然,也可以按照这种方法在指定的部件上添加样式表。
8.1.3添加资源和样式表
这里参考CSDN人家的博客:
QT添加资源和样式表(设计窗口背景图)_qt 按钮resourceroot_Kevin_8_Lee的博客-CSDN博客
9.数据库
9.1连接数库
9.2执行SQL语句
9.3使用SQL模型
这一块的学习我放在了CSDN博客上了,具体学习参考:
嵌入式GUI开发实验:数据库_Futurist_ljl的博客-CSDN博客
10.学习思路
总体来说,还是可以把嵌入式学习分为三个大的阶段:
首先基础学习阶段,这就包括通用编程基础(C语言、数据结构/算法、操作系统、计网、计组、Linux系统基础)和基本的硬件基础,扎实地掌握这两大基础,是后续持续发展和不断进步的动力源泉。
其次就是嵌入式应用编程阶段,或者说系统平台编程阶段。因为一般会以特定的嵌入式平台和特定的嵌入式操作系统为依托,熟悉这个系统平台上的编程方法和流程。以常见的ARM+Linux平台为例,需要掌握从内存管理到多任务编程、文件I/O、网络编程,甚至图形化界面编程等几个大的方面。
最后就是深入嵌入式底层开发阶段,最常见的就是内核开发和驱动开发,这些统属于内核态开发范畴,所以需要对操作系统内部机制有所涉猎和理解,在此基础上需要掌握从系统移植到内核开发、驱动开发的各个细节,这是成神之路。
11.学习书籍推荐
12.学习心得
经过一学期GUI课程的学习,我收获的远远不止课本上的知识,我获得了从学习过程中发现问题并且努力解决的品格,并开始学着写自己的CSDN博客(这是我的CSDN博客Futurist_ljl的博客_CSDN博客-GUI,数据库领域博主),在学习GUI的道路上,学会渴望知识,学会结交有帮助的朋友,这才是我学习这门课最大的收获!还望自己在以后的学习过程中,多发散思维,寻求突破。