南昌航空大学实验报告
二00 一四 年 五 月 十四 日
课程名称: 嵌入式系统设计及应用 实验名称: QT应用程序设计 班级: 姓名: 同组人:
指导教师评定: 签名:
一、 实验内容
1. 阅读QT主窗口程序helloworld.cpp,然后编译并运行。
2. 在helloworld.cpp程序中增加一个名为“hello”的按钮。
3. 编写一个登陆对话窗程序
二、实验步骤
(一)helloword程序
1.我们用File->New菜单来新建工程。
2这里我们选择Qt4 Gui Application。
3下面输入工程名和要保存到的文件夹路径。我们这里的工程名为helloworld。 4这时软件自动添加基本的头文件,因为这个程序我们不需要其他的功能,所以直接点击Next。
5.我们将base class选为QDialog对话框类。然后点击Next。 6点击Finish,完成工程的建立。
7我们可以看见工程中的所有文件都出现在列表中了。我们可以直接按下下面的绿色的run按钮或者按下Ctrl+R快捷键运行程序。
(二)登陆对话框程序
1.先新建Qt4 Gui Application工程,工程名为mainWidget,选用QWidget作为Base class,这样便建立了主窗口
2.然后新建一个Qt Designer Form Class类,类名为loginDlg,选用Dialog without Buttons,将其加入上面的工程中
3.在logindlg.ui中设计下面的界面:行输入框为Line Edit。其中用户名后面的输入框在属性中设置其object Name为usrLineEdit,密码后面的输入框为pwdLineEdit,登录按钮为loginBtn,退出按钮为exitBtn。
4.将exitBtn的单击后效果设为退出程序,关联如下:
5.右击登录按钮选择go to slot,再选择clicked(),然后进入其单击事件的槽函数,写入一句
void loginDlg::on_loginBtn_clicked()
{
accept();
}
6.改写main.cpp:
#include <QtGui/QApplication>
#include “widget.h”
#include “logindlg.h”
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w; loginDlg login;
if(login.exec()==QDialog::Accepted)
{
w.show(); return a.exec();
}
else
return 0;
}
7.这时执行程序,可实现按下登录按钮进入主窗口,按下退出按钮退出程序。
8.添加用户名密码判断功能。将登陆按钮的槽函数改为:
void loginDlg::on_loginBtn_clicked()
{
if(m_ui->usrLineEdit->text()==tr(“qt”)&&m_ui->pwdLineEdit->text()==tr(“123456″)) //判断用户名和密码是否正确
accept();
else{
QMessageBox::warning(this,tr(“Warning”),tr(“user name or password error!”),QMessageBox::Yes); //如果不正确,弹出警告对话框
}}
9.这时再执行程序,输入用户名为qt,密码为123456,按登录按钮便能进入主窗口了,如果输入错了,就会弹出警告对话框。
10.如果输入错误,便会弹出警告提示框
11.在logindlg.cpp的loginDlg类构造函数里,添上初始化语句,使密码显示为小黑点。 loginDlg::loginDlg(QWidget *parent) : QDialog(parent), m_ui(new Ui::loginDlg) {
m_ui->setupUi(this);
m_ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
}
12.如果输入如下图中的用户名,在用户名前不小心加上了一些空格,结果程序按错误的用户名对待了。
我们可以更改if判断语句,使这样的输入也算正确。
void loginDlg::on_loginBtn_clicked() {
if(m_ui->usrLineEdit->text().trimmed()==tr(“qt”)&&m_ui->pwdLineEdit->text()==tr(“123456″)) accept();
else{
QMessageBox::warning(this,tr(“Warning”),tr(“user
error!”),QMessageBox::Yes);
}}
13.最后,如果输入错误了,重新回到登录对话框时,我们希望可以使用户名和密码框清空并且光标自动跳转到用户名输入框,最终的登录按钮的单击事件的槽函数如下: void loginDlg::on_loginBtn_clicked()
{
if(m_ui->usrLineEdit->text().trimmed()==tr(“qt”)&&m_ui->pwdLineEdit->text()==tr(“123456″)) //判断用户名和密码是否正确
accept();
else{
QMessageBox::warning(this,tr(“Warning”),tr(“user name or password name or password error!”),QMessageBox::Yes); //如果不正确,弹出警告对话框m_ui->usrLineEdit->clear();//清空用户名输入框m_ui->pwdLineEdit->clear();//清空密码输入框
m_ui->usrLineEdit->setFocus();//将光标转到用户名输入框}}
三、实验结果
Hello world程序运行结果
密码为文本输入框的 密码错误弹出对话框
密码输入为密码输入框的 用户名中前面有空格
四、实验分析
通过此次试验我知道了如何使用QT软件,且用C++实现简单的用户界面程序,知道QT所能够应用的场合,QT是一个很好的嵌入式用户界面程序,因为它所需要占用的资源比较少,QT的信号与槽机制使得事件相应机制非常的好,在编写这次实验的小程序时,出现了几个错误,但解决之后才发现是很简单的,只是因为自己比较粗心而造成的。
第35卷(2007)第4期 计算机与数字工程 179
基于MVC的Qt应用程序框架的设计与实现
王玉亭 孙 剑
(聊城大学计算机学院 聊城 252000)
3
摘 要 介绍了基于MVC的Qt应用程序框架的基本设计思想,重点分析了MVC计及对象动态生成机制的实现方法。这一框架的应用极大的提高了Qt关键词 Qt 应用程序框架 MVC中图分类号 TP31
1 引言
由挪威TrC++图形用户界面工具箱Qt,具有很多的优点:第一,Qt包含了一系列的类,并通过这些类隐藏了在处理不同窗口系统时的潜在问题(文件处理、时间处理等),实现了跨平台的可移植性;第二,Qt完全支持国际化应用,基于消息翻译表,用户界面文本可以被翻译成各国语言;第三,Qt支持用户化的外观,基于Qt的应用软件能在Motif外观、Windows外观,及一些用户化的外观之间相互转换;第四,Qt是完全面向对象的,容易扩展,并允许真正的组件编程,Qt中的组件通信采用的是一种称为“信号和槽(signalsandslots)”的对象内部通信机制,该机制是类型安全的,它代替了原始的工具包中粗糙的回调函数和消息映射。另外Qt中使用MOC(MetaObjectCompiler)的预处理器将含有信号和槽定义的源代码翻译成标准C++代码。
Qt是开发图形用户界面应用程序的理想工具,已应用于全世界上百个软件项目的开发,越来越多的研发人员在开发应用程序时首先选择了Qt库。开发基于Qt的应用程序时,用户首先应从类QMainWindow派生出自己的用户界面类,然后在main函数中定义一个QApplication的对象来构建自己的应用程序。但是Qt中没有一个完整的应用程序框架来支持开发,技术人员在开发基于Qt的应用程序时,需要重复的做很多前端工作,严重违背了软件的可复用性原则。本文详细介绍了基于Qt的MVC模式应用程序框架的设计与实现,该框架将有助于Qt用户在开发应用程序时着重于应用
3
部分,而不是应用程序的前端构建部分。
2 应用程序框架
所谓框架,是指“能够为构造某种特定类型的软件系统形成的一个可复用设计结构的一组互相
[1]
协作的类”。框架定义了一类应用的体系结构,从某种意义上说,一个框架就是一个不完整的系统,它可以被剪裁以创建完整的应用。框架包含了一类应用程序的共同点,因而减少了构建这类应用程序的代价。
开发应用程序框架目的是为用户设计实现功能强大的软件系统提供开发基础。应用程序框架已经提供了良好的体系结构和应用程序所需的通用功能,因此开发者只需要专注于应用程序的实际需求,通过使用、实现或扩展应用程序框架中的类和接口来完成与特定应用相关的功能,从而更快的开发出稳定健壮的应用程序。
3 基于Qt的应用程序框架设计与实现
3.1 总体结构设计
本文中介绍的应用程序框架采用了MVC机制。MVC(Model—View-Controller,模型—视图—控制器)是一种很重要的设计模式。它包括三种对象:模型(Model)提供业务逻辑,视图(View)是模型在屏幕上的显示,控制器(Controller)用于管理用户与视图发生的交互。图形用户界面中,无序的消息驱动模式程序取代了传统的流程式软件运行模式。我们可以把一个问题(软件)的抽象简单归结为:一个软件就是一个应用,它包含唯一的数据(即模型,或包含若干元素的大型的复合模型)
收到本文时间:20xx年5月23日
作者简介:王玉亭,男,硕士研究生,主研领域:软件工程。孙剑,女,硕士研究生,主研领域:计算机网络。? 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved.
180 王玉亭等:基于MVC的Qt应用程序框架的设计与实现 第35卷
和若干个显示窗口(即视图),窗口提供菜单、工具
按钮,交互编辑动作区产生消息(即控制),在绘图区截获鼠标消息完成对模型的编辑修改。
我们在应用程序框架中设计了一个控制类(PDocTemplate)来管理视图(PView)和对应的模型类(PDocument)。若一个应用中有多个视图,则形成多个小范围的MVC,最后这些控制类聚合到主应用类PApplication中。视图类的存在依赖于模型类,它的指针存放在主窗口类(PMainWindow)类中;主窗口类在控制类(PDocTemplate)中创建,它的指针存放在应用程序类中;
架中的模型类、视图类和主窗口类都必须满足这种机制。为了实现该机制,框架中定义了一个POb2ject类,所有满足这种机制的类都要以PObject类为基类。
classPObject{public:
PObject(QObject3parent=0,char3name=0);virtual~PObject();
virtualm()const;eClass,框架中定义了一个PRun2eClass类,该类包含满足对象动态生成机制的类的名称、大小及一个函数指针来指向对象生成函数。PObject类及其所有子类中都需要包含PRunt2imeClass类的一个静态对象。
structPRuntimeClass{
char3m_lpszClassName;intm_nObjectSize;
图1 应用程序框架总体类结构图
PObject3(3m_pfnCreateObject)();};
应用程序类(PApplication)由Qt中的QApplia2tion类派生,该类主要负责完成应用程序所必需的
一些环境的初始化、服务器和客户程序间的通讯、应用程序框架的注册和注销、应用程序的实例化、应用程序的常用变量的管理。程序运行时,应用程序类负责事件的发送及事件循环的处理。在PAp2
plication类中包含一个或几个控制类的指针,负责管理之后动态生成的模型类和视图类。
控制类(PDocTemplate)实现程序的封装和视图类、模型类的实例化,并在主窗口提供一个或多个视图,从而实现一个工作区。控制类是数据和视图的接口,将模型和视图两者动态联系起来。模型/视图视为两位一体,每当用户打开一份文件,程序由本类自动动态产生模型和视图的对象各一份,形成一个运行单元,这两个对象由控制类进行管理。
框架窗口类(PMainWindow)是从Qt中的QMainWindow类派生出的,负责应用程序的UI部
在框架中定义了如下两个宏,其中的class_name是满足对象动态生成机制的类的名称。
#defineDECLARE_DYNCREATE(class_name)\public:\
staticPRuntimeClassclass##class_name;\
virtualPRuntimeClass3GetRuntimeClass()const;\staticPObject3CreateObject();
#defineIMPLEMENT_DYNCREATE(class_name)\PObject3class_name::CreateObject()\{returnnewclass_name();}\
staticchar_lpsz##class_name[]=#class_name;\PRuntimeClassclass_name::class##class_name={\
_lpsz##class_name,sizeof(class_name),class_name::CreateOb2ject};\
PRuntimeClass3class_name::GetRuntimeClass()const\{return&class_name::class##class_name;}
分,包括创建和管理菜单条、工具条、状态条和滚动
条等。同时框架窗口类还负责创建视图类,并存有建在该类上的视图的指针变量,从菜单或工具条中发出的消息直接发往PView类,在PView类中对各个菜单项的回调做出反应。3.2 对象动态生成机制
应用程序在执行期间根据获取的一个类名动态产生一个对象,称为对象动态生成机制。上述框
满足对象动态生成机制的类,需要在声明里添加DECLARE_DYNCREATE宏,在定义文件里面添加IMPLEMENT_DYNCREATE宏。宏DECLARE_DYNCREATE用来声明对象生成函数CreateObject()和获得运行时识别类名的对象的函数GetRunt2imeClass();宏IMPLEMENT_DYNCREATE用于定义以上两个函数,并根据类的名称初始化用于运行时识别类名的静态PRuntimeClass对象。
最后定义宏RUNTIME_CLASS作为用户级接
(下转第186页)
? 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved.
186 张雷蕾:智能软件狗加密设计与实现 第35卷
[1]COMS串行EEPROM原理及应用武汉力源单片机技术
5.将程序的重要部分加以编码加密,运行时才
实时还原;
研究所
[2]TM卡技术手册深圳兆凯电子有限公司
[3]王连生.软件狗加密技术透视[M].北京:清华大学出
5 结束语
本文论述了采用串行EEPROM存储器设计软件加密狗的设计原则和方法,并给出具体的电路图
和设定密码、检测密码的方法,它已在实际中得到了应用,实现了对软件的加密。
参考文献
版社,1996
[4]王化文,张德向,吴亮[M].计算机安全保密原理与技
术.北京:科学出版社,1993
[5]基于PIC16C54[J].电子技
术应用,2003,1
(上接第180页)
构造一个能够独立运行的完整程序,开发过程简单快捷。在一些图形处理软件中我们使用了该应用程序框架,用基于Qt的图形处理组件对框架进行了扩充,取得了良好的效果。下一步工作方向是要设计实现一个程序向导,可以根据用户需要自动的生成基于该框架的应用程序代码,进一步减轻应用程序的开发者的工作量。
参考文献
[1]GammaE,HelmR,JohnsonR,VlissidesJR.Designpat2
terns:Elementsofreusableobject-orientedsoftware[M].Addison-WesleyPublishingCompany,Inc,1995.[2]QtRd’ereneeDoemaentation[EB/OL].http://doe.troll2
teeh.cam/3.2/index.htm1.
[3]包龙翔等.设计面向对象的软件框架[J].计算机应用
口,制的类的静态m对象指针,然后通过静态PRuntimeClass对象的生成函数指针调用对象生成函数产生一个对象。
#defineRUNTIME_CLASS(class_name)\(&class_name::class##class_name)
3.3 基于Qt的应用程序框架的表现形式
Qt中的QDockArea组件支持多窗口形式的MDI,QTabWidget组件支持目前较流行的标签形式
的MDI,开发者可以用不同的Qt组件来替换框架中的主窗口类的工作区,以实现框架表现形式的多样性。Qt中的信号和槽机制对MDI形式下的多个视图间的有效通信提供了有力的支持。在Qt中,当一个特定事件发生时,一个信号将被发射,槽用来接收信号。信号和槽宽松地联系在一起,发射信号的类不必知道究竟是哪个槽要接收这个信号,槽也不必知道它是否被哪个信号连接。Qt的信号和槽的机制保证了当一个信号和一个槽连接起来时,在正确的时间内槽会使它所连的信号的参数被系统调用,并且确保对象可以被用作一个软件组件。在信号和槽机制下,多个视图间的通信就变得只需要用户实现丰富信号和槽如此简单了。
研究,2003(3)
[4]王子强等.Linux下图形用户界面程序的开发与实现
[J].计算机应用与软件,2005,22(6)
[5]刘连喜等.MFC框架中的设计模式分析[J].计算机应
用与软件,2005,22(9)
[6][美]ArthurGriffith著.高寿福,张华译.KDE/Qt编程宝
典[M].北京:电子工业出版社,2001
[7]Xteam(中国)软件技术有限公司.Qt程序设计[M].清
华大学出版社,2000
[8]SOLIND.24小时学通Qt编程[M].裒鹏飞译.北京:人
4 结束语
本文设计的应用程序框架较好地满足了用户
运用Qt来进行软件开发的需要。用户根据自己的需求,在该应用程序框架的基础上进行扩充便可以
民邮电出版社,2000
[9]BruceEckel.ThinkinginC++,secondedition.Volume
one[M].PrenticeHallInc,2000
? 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved.
8
Keywords C/Smodel,B/Smodel,Multi-tierArchitec2
(Page:176)ture,ApplicationServer,DatabaseServer
RRM
(Page:187)
EmailClassificationBasedonTextStructure
DesignAndImplemetationofFrameworkofQTApplica2
tionBasedonMVCby WangYutingAbstract ThispaperdiscussesthebasicdesignideaoftheapplicationframeworkbasedonQt.ThepatternoftheapplicationframeworkisMVC.Theauthoranalyzestheimplementationoftheframework’sunitaryarchitec2tureandthedynamiccreationofobject.Thisapplicationframeworkimprovesefficiencyofprogramdevelopment.Keywords Qt,applicationframework,MVC
(Page:by LiaoLing
Abstract Content-basedemailclassificationoftenusestheVectorSpaceModel(VSM)asatooltorepresentemails.Thismodelisbasedonthefrequenciesofthewordseachofwhichisindepetfromeachother;itignoresthestructureofemtheenvironmenta2rotheords.revectorscannotfullydey,tstheprecisionofagotiopaper,amethodthatmodi2fieisproposed.Accordingtoemail,themodifiedVSMtakesparagraphsasunitsmodifiestheweightsofthefeaturesbyanalyzingtherelationshipbetweentheparagraphsaswellasthetermsintheparagraphs.Anexperimentalsystemisdesignedandtheresultisgivenandanalyzedatlast.
Keywords Vectorspacemodel,Emailclassification,
(Page:190)Structureofparagraphs
DesignandApplicatii+ilder
BasedonDiby WangYarongAbstract DirectShowastreamingmediaSDKofMi2crosoftWindowsplatform.FocusingonthedesignofmediaplayerinC++BuilderbyDirectShowtechnolo2gy,thisarticleprovidestheachievementofmediaplayerprogrambyusingDirectXSDKandDSPackindividuallyandgivesexamplesofcrucialcodes.
Keywords DirectShow,mediaplayer,DSPack,filter
(Page:181)
ResearchandImplementationofSchedulingAlgorithmsforLoadBalancinginHeterogeneousClusterEnvironment
by ShenZhangguoAbstract Inordertobalanceloadandexplorethedy2namicsheduletotheparalleltasksintheprocesslevel,thispaperpresentsadynamicloadbalancingalgorithminheterogeneousclusterenvironment,combiningself-a2daptivedatagatheringandexchangingalgorithms,effec2tivelysolvestheloadimbalanceproblemamongtheserv2ersandcertainlyincreasesthethroughputofthewholesystem.
Keywords Loadbalancing,Schedulingalgorithms,clus2
(Page:194)ter
DesignandRealizationofIntercommunionSubsystemof
VirtualNetworkLaboratoryby LiRongAbstract Withthenetworkperformanceenhancementofcomputer,informationandnetworktechnologyareappliedtovariousfieldsgreatly.Inordertoneednewre2quirementoflabinthelongdistanceeducation,somekeytechnologyofASPandDSPareadoptedinthispa2per.Accordingtothepracticalsituation,intercommunionsubsystemofnetworkisconstructedintheflatformofvirtualnetworklaboratory,andthesystemisloadedtointernetwhensatisfiescondition.Ithasveryactivesig2nificancetoimproveteachingqualityandextendteachingareaoflab.
Keywords networktechnology,longdistanceeduca2
(Page:197)tion,ASP,intercommunionsubsystem
RealizationandDesignofIntelligentSoftwareDogforEn2
cryptionby ZhangLeileiAbstract Itisveryvitalforinformationsecuritytosoft2wareencryption.SoftwareencryptionhasbeenrealizedbyusingEEPROMinthepaper.Experimentresultsshowthattheencryptionmethodhasmeritsonconven2ientinstallation,non-hardwareresourceanddifficultcrack.Itcanbeusedinpractice.
Keywords softwaredog,memorizer,encryption
(Page:184)
ADownlinkRadioResourceAllocationAlgorithminTD-CDMAby PengBinAbstract Thispaperintroducesadownlinkradiore2sourceallocationalgorithm,thealgorithmcanallocatethesystemresourceeffectivelyaccordingtotheusers’servicepriorityandthenumberofuserineachpriority,italsosolvestheequipoiseproblembetweensystemre2sourcesefficiencyandtheuser’sthroughputindifferentradioenvironment,thetestresultsprovethealgorithm’sfeasibilityandperformance.
Keywords 3G,TD-CDMA,RadioResourceAllocation,
? 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved.
工程结构设计心得课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。通过课程设计能提高学生对所学知…
心得体会通过这次课程设计,让我更加深刻了解课本知识,和以往对知识的疏忽得以补充,在设计过程中遇到一些模糊的公式和专业用语,比如说经…
个人小结三周的课程设计结束了,我和同学们一起度过了这段忙碌而充实的时光。这次的课程设计深刻的反映出实践是检验真理的唯一标准这句话的…
通过近两周的奋斗,课程设计接近了尾声。经过两周的奋战我的课程设计终于完成了。在没有做课程设计以前觉得课程设计只是对信号与系统这门课…
课程设计心得体会通用通过此次课程设计使我更加扎实的掌握了有关方面的知识在设计过程中虽然遇到了一些问题但经过一次又一次的思考一遍又一…
团课总结—学雷锋见行动三月,树木抽出新枝,小草露出脑袋。这样一个充满生机的时候,同时迎来了雷锋月。根据院团委的统一要求,我院于20…
20xx年,民政局党支部按照县委的统一部署,在县直机关工委和政府党总支的领导下,以邓小平理论和“三个代表”重要思想为指导,认真贯彻…
尊敬的各位领导、亲爱的各位同事:大家上午好!20xx年已经过去,转眼间我来公司已经五年多的时间了,对我而言,xx年的工作是最为难忘…
劳卫部20xx—20xx年度工作总结岁月如箭,光阴荏苒,转眼间一年度的工作就要结束,作为学生会重要组成部分的劳卫部,各项工作也告了…
本学期,我六年级中队在学校领导的统一组织下,在任课教师的大力支持和配合下,各项工作顺利开展,学习、生活等方面都取得较突出的成绩。现…