Qt教程.docx
- 文档编号:30155962
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:65
- 大小:1.99MB
Qt教程.docx
《Qt教程.docx》由会员分享,可在线阅读,更多相关《Qt教程.docx(65页珍藏版)》请在冰豆网上搜索。
Qt教程
GUI简介
图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户接口。
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
1.1MFC
微软基础类库(MicrosoftFoundationClasses,简称MFC)是一个微软公司提供的类库(classlibraries),以C++类的形式封装了WindowsAPI,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC的主要优点是可以用面向对象的方法来调用WindowsAPI,以及应用程序开发的便捷。
MFC将很多应用程序开发中常用的功能自动化,并且提供了文档框架视图结构和活动文档这样的便于自定义的应用程序框架。
缺点:
虽然MFC的源代码对用户是完全开放的,但是MFC的一些封装过程过于复杂,以致于新用户很难迅速掌握MFC的应用程序框架,以及在调试中定位问题的位置。
参考书:
《VC++深入详解》,孙鑫。
1.2wxWidgets
wxWidgetsisaC++librarythatletsdeveloperscreateapplicationsforWindows,MacOSX,LinuxandUNIXon32-bitand64-bitarchitecturesaswellasseveralmobileplatformsincludingWindowsMobile,iPhoneSDKandembeddedGTK+.
http:
//www.wxwidgets.org/about/screensh.htm
1.3MiniGUI
MiniGUIisoneoftheworldfamousfreesoftwareprojects.MiniGUIaimstoprovidealightweightgraphicsuserinterface(GUI)supportsystemforreal-timeembeddedsystems.SincethefirstreleaseundertheGPLlicenseatthebeginningof1999,MiniGUIhasbeenwidelyusedinhandheldterminals(mobilephonesandPDAs),settopboxes,industrycontrolsystems,industryinstruments,portablemediaplayers,andsoon.
MiniGUIhasbecomeacross-operating-systemGUIsystem;itcanrunonLinux/uClinux,eCos,VxWorks,pSOS,ThreadX,Nucleus,andevenuC/OS-II;ThehardwareplatformstestedincludeIntelx86,ARM(ARM7/ARM9/StrongARM/xScale),PowerPC,MIPS,BlackFin,DragonBall,andColdFire.
Atpresent,thelatestGPLversionofMiniGUIis1.6.10.ThisversionprovidessupportforLinux/uClinuxandeCosoperatingsystems.
ThefollowingfigurearetheMiniGUI-basedapplicationinterfacesforaWiFiphone.ThisdeviceisbasedontheeCosoperatingsystem.
1.4μC/GUI
μC/GUIisuniversalgraphicalsoftwareforembeddedapplicationsthatprovidesanefficientprocessorandLCDcontroller-independentGUItoapplicationsusingagraphicalLCD.Designedforsingleandmulti-taskenvironments,μC/GUIisadaptabletonearlyanysizephysicalorvirtualdisplaywithanLCDcontrollerandCPU,andisdeliveredwithallsourcecode.
μC/GUIiscompatiblewithnearlyallCPUsand,unlikeotherGUIsthatrequireaC++compiler,μC/GUIiswrittenentirelyinANSI-C.Processorsrangingfrom8-to32-bitsrunμC/GUI.16-bitCPUs(orbetter)achieveoptimalperformance.
1.5Qt
●参考书:
《C++GUIQt4编程(第2版)》,布兰切特(JasminBlanchette)(作者),萨默菲尔德(MarkSummerfield)(作者),闫锋欣(译者),曾泉人(译者),张志强(译者)
●
一、Qt与QtCreator介绍
1.1Qt与QtCreator简介
Qt是一个跨平台应用程序和UI开发框架。
使用Qt您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
QtCreator 是全新的跨平台QtIDE,可单独使用,也可与Qt库和开发工具组成 一套完整的SDK.其中包括:
高级C++代码编辑器,项目和生成管理工具,集成的上下文相关的帮助系统,图形化调试器,代码管理和浏览工具。
1.2Qt的历史
●1996年Qt上市
●Qt已成为数以万计商业和开源应用程序的基础
●Qt的软件授权机制具有经受市场检验的双重授权(开源与商业)模式
●QtSoftware的前身为Trolltech(奇趣科技)。
Trolltech(奇趣科技)始创于1994年
●Trolltech(奇趣科技)于2008年6月被Nokia收购,加速了其跨平台开发战略
1.3Qt所支持的平台
嵌入式Linux(EmbeddedLinux)
QtforEmbeddedLinux®是用于嵌入式Linux的应用程序架构。
Qt可以在任何支持Linux的平台上运行。
Qt的直观API,让您只须少数几行代码便可以更短的时间实现更高端的功能。
特点:
1.用于Linux的紧凑的视窗系统;2.用于广泛的处理器;3.移植桌面代码至嵌入式平台,或通过重新编译,反之亦然;4.编译移除不常使用的组件与功能;5.利用系统资源并实现本地化性能;6.开发嵌入式设备犹如开发桌面系统一样轻松简单。
基本要求:
开发环境:
Linux 内核2.4或更高;GCC版本3.3或更高;用于MIPS®GCC版本3.4或更高。
占用存储空间:
存储空间取决于配置,压缩后:
1.7–4.1MB,未压缩:
3.6–9.0MB。
硬件平台:
易于载入任何支持带C++编译器和帧缓冲器驱动Linux的处理器。
支持ARM®,x86®,MIPS®,PowerPC®。
1.4Qt类库
模块化QtC++类库提供一套丰富的应用程序生成块(block),包含了生成高级跨平台应用程序所需的全部功能。
1.5QtQuick介绍
QtQuick是在Qt4.7中被引进的一项技术。
QtQuick是一种高级用户界面技术,开发人员和设计人员可用它协同创建动画触摸式用户界面和应用程序。
它由三部分构成:
1.QML:
像JavaScript一样的声明式语言;2.QtCreator:
在 QtIDE中的直观工具;3.QtDeclarative:
强大的C++模块。
二、QtCreator的安装和Helloworld程序的编写
1.首先到Qt的官方网站上下载QtCreator,这里我们下载windows版的。
下载地址:
(1.8GB)
下载完成后,直接安装即可,安装过程中按默认设置即可。
2.运行QtCreator,首先弹出的是欢迎界面,这里可以打开其自带的各种演示程序。
3.点击创建项目来新建工程。
4.这里我们选择QtGui应用。
5.下面输入工程名和要保存到的文件夹路径。
我们这里的工程名为helloworld。
6.在目标设置中选择桌面,然后点击下一步。
7.在类信息中基类选择为QDialog对话框类,然后点击下一步。
8.点击完成,完成工程的建立。
9.我们可以看见工程中的所有文件都出现在列表中了。
我们可以直接点击下面的绿色的run按钮或者按下Ctrl+R快捷键运行程序。
10.程序运行会出现空白的对话框,如下图。
11.我们双击文件列表的dialog.ui文件,便出现了下面所示的图形界面编辑界面。
12.我们在左下角的Displaywidgets控件栏里找到Label,按着鼠标左键将其拖到设计窗口上,如下图。
14.我们双击它,并将其内容改为helloworld,在右下角的属性栏里将字体改为TimeNewRoman,大小改为15。
16.我们拖动标签一角的蓝点,将全部文字显示出来。
17.按Ctrl+s保存dialog.ui,再次按下运行按钮,便会出现helloworld。
到这里helloworld程序便完成了。
QtCreator编译程序,会在工程路径中生成一个helloworld-build-desktop文件夹,里面的debug文件里有程序的.exe可执行文件。
但QtCreator默认是用动态链接的,就是可执行文件在运行时需要相应的.dll文件。
我们点击生成的.exe文件,可能显示“没有找到libgcc_s_dw2-1.dll,因此这个应用程序未能启动。
重新安装应用程序可能会修复此问题。
”表示缺少该dll文件。
解决这个问题我们可以将D:
\QtSDK\Desktop\Qt\4.7.3\mingw\bin加入系统Path环境变量。
右击我的电脑->属性->高级->环境变量->在系统变量列表中找到Path,将路径加入其中即可。
三、用纯代码编写Helloworld
1.新建空的Qt工程。
2.工程名为helloworld_src,并选择保存路径(提示:
路径中不能有中文)。
然后在目标设置中选择桌面,点击下一步,然后点击完成。
3.在新建好的工程中添加文件。
右击工程文件夹,弹出的菜单中选择添加新文件。
4.选择C++源文件。
5.文件名为main.cpp,点击下一步。
6.这里自动将这个文件添加到了新建的工程中。
保持默认设置,点击完成。
7.在main.cpp文件中添加代码。
#include
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
returnapp.exec();
}
8.这时点击运行,程序执行了,但看不到效果,因为程序里什么也没做。
我们点击应用程序输出窗口中的红色方块,停止运行。
9.我们再更改代码。
添加一个对话框对象。
#include
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
QDialog*dd=newQDialog();
dd->show();
returnapp.exec();
}
10.运行效果如下。
11.我们更改代码如下,在对话框上添加一个标签对象,并显示helloworld。
#include
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
QDialog*dd=newQDialog();
QLabel*label=newQLabel(dd);
label->setText("helloworld");
dd->show();
returnapp.exec();
}
12.运行效果如下。
13.我们更改代码如下,修改Label及字体设置,并显示Helloworld如下。
#include
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
QDialog*dd=newQDialog();
QLabel*label=newQLabel(dd);
label->setText("Helloworld");
dd->resize(400,300);
label->setGeometry(QRect(170,130,111,31));
QFontfont;
font.setFamily(QString:
:
fromUtf8("TimesNewRoman"));
font.setPointSize(15);
label->setFont(font);
dd->show();
returnapp.exec();
}
四、编写多窗口程序
实现功能:
程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。
当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。
实现原理:
1.信号和槽(SignalsandSlots)
Signalsandslotsareusedforcommunicationbetweenobjects.InGUIprogramming,whenwechangeonewidget,weoftenwantanotherwidgettobenotified.Forexample,ifauserclicksaClosebutton,weprobablywantthewindow'sclose()functiontobecalled.
Oldertoolkitsachievethiskindofcommunicationusingcallbacks.Acallbackisapointertoafunction,soifyouwantaprocessingfunctiontonotifyyouaboutsomeeventyoupassapointertoanotherfunction(thecallback)totheprocessingfunction.Theprocessingfunctionthencallsthecallbackwhenappropriate.Callbackshavetwofundamentalflaws:
Firstly,theyarenottype-safe.Wecanneverbecertainthattheprocessingfunctionwillcallthecallbackwiththecorrectarguments.Secondly,thecallbackisstronglycoupledtotheprocessingfunctionsincetheprocessingfunctionmustknowwhichcallbacktocall.
InQt,wehaveanalternativetothecallbacktechnique:
Weusesignalsandslots.Asignalisemittedwhenaparticulareventoccurs.Aslotisafunctionthatiscalledinresponsetoaparticularsignal.Signalsandslotsarelooselycoupled:
Aclasswhichemitsasignalneitherknowsnorcareswhichslotsreceivethesignal.Qt'ssignalsandslotsmechanismensuresthatifyouconnectasignaltoaslot,theslotwillbecalledwiththesignal'sparametersattherighttime.
AllclassesthatinheritfromQObjectoroneofitssubclasses(e.g.,QWidget)cancontainsignalsandslots.Signalsareemittedbyobjectswhentheychangetheirstateinawaythatmaybeinterestingtootherobjects.Whenasignalisemitted,theslotsconnectedtoitareusuallyexecutedimmediately,justlikeanormalfunctioncall.Thisisalltheobjectdoestocommunicate.
Slotscanbeusedforreceivingsignals,buttheyarealsonormalmemberfunctions.Youcanconnectasmanysignalsasyouwanttoasingleslot,andasignalcanbeconnectedtoasmanyslotsasyouneed.Itisevenpossibletoconnectasignaldirectlytoanothersignal.(Thiswillemitthesecondsignalimmediatelywheneverthefirstisemitted.)
详细参考见帮助《Signals&Slots》
2.intQDialog:
:
exec()[slot]
Showsthedialogasamodaldialog,blockinguntiltheuserclosesit.ThefunctionreturnsaDialogCoderesult
voidQDialog:
:
accept()[virtualslot]
HidesthemodaldialogandsetstheresultcodetoAccepted.
Themostcommonwaytodisplayamodaldialogistocallitsexec()function.Whentheuserclosesthedialog,exec()willprovideausefulreturnvalue.Typically,togetthedialogtocloseandreturntheappropriatevalue,weconnectadefaultbutton,e.g.OK,totheaccept()slotandaCancelbuttontothereject()slot.
详细参考见帮助《QDialogClassReferenc》
实现过程:
1.首先新建QtGui应用工程,工程名为nGui,Baseclass选为QWidget。
建立好后工程文件列表如下图。
2.新建对话框类,如下图,在新建中,选择Qt设计师界面类。
3.选择DialogwithoutButtons。
4.类名设为myDlg。
5.点击完成。
注意这里已经默认将其加入到了我们刚建的工程中了。
6.双击mydlg.ui文件,打开设计界面,拖入一个PushButton,将其上的文本改为“进入主窗口”,在其属性窗口中将其objectName改为enterBtn。
在菜单栏选择编辑-->编辑信号/槽,在下面信号和槽编辑器中进行信号和槽的关联。
其中,打开发送者下拉菜单,设为enterBtn,信号设为clicked(),接收者设为myDlg,槽设为accept()。
这样就实现了单击这个按钮使这个对话框关闭并发出Accepted信号的功能。
下面我们将利用这个信号。
7.保存mydlg.ui,切换到编辑模式。
修改主函数main.cpp,如下:
#include
#include"widget.h"
#include"mydlg.h"//加入头文件
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
Widgetw;
myDlgmy1;//建立自己新建的类的对象my1
//voidQDialog:
:
accept()[virtualslot]setstheresultcodetoAccepted.
if(my1.exec()==QDialog:
:
Accepted)
//利用Accepted返回值判断enterBtn是否被按下
{
w.show();//如果被按下,显示主窗口
returna.exec();//程序一直执行,直到主窗口关闭
}
else
return0;//如果没被按下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Qt 教程