QT编程教学计划.docx
《QT编程教学计划.docx》由会员分享,可在线阅读,更多相关《QT编程教学计划.docx(19页珍藏版)》请在冰点文库上搜索。
QT编程教学计划
第一个例子
在这个例子里我们介绍了一个定时器来实现动画的射击。
?
?
?
?
?
t11/lcdrange.h包含lcdrange类定义。
t11/lcdrange.cpp包含lcdrange类实现。
t11/cannon.h包含cannonfield类定义。
t11/cannon.cpp包含cannonfield类实现。
t11/main.cpp包含mywidget和main。
(1)t11/cannon.h
voidshoot();
当炮弹不在空中,调用这个槽会使加农炮射击。
privateslots:
voidmoveshot();
当炮弹正在空中时,这个私有槽使用一个定时器来移动射击。
private:
voidpaintshot(qpainter*);
这个函数来画射击。
qrectshotrect()const;
当炮弹正在空中的时候,这个私有函数返回封装它所占用空间的矩形,否则它就返回一个没有定义的矩形。
inttimercount;
qtimer*autoshoottimer;
floatshoot_ang;
floatshoot_f;
这些私有变量包含了描述射击的信息。
timercount保留了射击进行后的时间。
shoot_ang是加农炮射击时的角度,shoot_f是射击时加农炮的力量。
(2)t11/cannon.cpp
#include<math.h>
我们包含了数学库,因为我们需要使用sin()和cos()函数。
cannonfield:
:
cannonfield(qwidget*parent,constchar*name):
qwidget(parent,name)
{
ang=45;
f=0;
timercount=0;
autoshoottimer=newqtimer(this,movementhandler);
connect(autoshoottimer,signal(timeout()),this,slot(moveshot()));
shoot_ang=0;
shoot_f=0;
setpalette(qpalette(qcolor(250,250,200)));
}
我们初始化我们新的私有变量并且把qtimer:
:
timeout()信号和我们的moveshot()槽相连。
我们会在定时器超时的时候移动射击。
voidcannonfield:
:
shoot()
{
if(autoshoottimer->isactive())
return;
timercount=0;
shoot_ang=ang;
shoot_f=f;
autoshoottimer->start(50);
}
只要炮弹不在空中,这个函数就会进行一次射击。
timercount被重新设置为零。
shoot_ang和shoot_f设置为当前加农炮的角度和力量。
最后,我们开始这个定时器。
voidcannonfield:
:
moveshot()
{
qregionr(shotrect());
timercount++;
qrectshotr=shotrect();
if(shotr.x()>width()||shotr.y()>height())
autoshoottimer->stop();
else
r=r.unite(qregion(shotr));
repaint(r);
}
moveshot()是一个移动射击的槽,当qtimer开始的时候,每50毫秒被调用一次。
它的任务就是计算新的位置,重新画屏幕并把炮弹放到新的位置,并且如果需要的话,停止定时器。
首先我们使用qregion来保留旧的shotrect()。
qregion可以保留任何种类的区域,并且我们可以用它来简化绘画过程。
shotrect()返回现在炮弹所在的矩形——稍后我们会详细介绍。
然后我们增加timercount,用它来实现炮弹在它的轨迹中移动的每一步。
下一步我们算出新的炮弹的矩形。
如果炮弹已经移动到窗口部件的右面或者下面的边界,我们停止定时器或者添加新的shotrect()到qregion。
最后,我们重新绘制qregion。
这将会发送一个单一的绘画事件,但仅仅有一个到两个举行需要刷新。
voidcannonfield:
:
paintevent(qpaintevent*e)
{
qrectupdater=e->rect();
qpainterp(this);
if(updater.intersects(cannonrect()))
paintcannon(&p);
if(autoshoottimer->isactive()&&updater.intersects(shotrect()))
paintshot(&p);
}
绘画事件函数在前一章中已经被分成两部分了。
现在我们得到的新的矩形区域需要绘画,检查加农炮和/或炮弹是否相交,并且如果需要的话,调用paintcannon()和/或paintshot()。
voidcannonfield:
:
paintshot(qpainter*p)
{
p->setbrush(black);
p->setpen(nopen);
p->drawrect(shotrect());
}
这个私有函数画一个黑色填充的矩形作为炮弹。
我们把paintcannon()的实现放到一边,它和前一章中的paintevent()一样。
qrectcannonfield:
:
shotrect()const
{
constdoublegravity=4;
doubletime=timercount/4.0;
doublevelocity=shoot_f;
doubleradians=shoot_ang*3.14159265/180;
doublevelx=velocity*cos(radians);
doublevely=velocity*sin(radians);
doublex0=(barrelrect.right()+5)*cos(radians);
doubley0=(barrelrect.right()+5)*sin(radians);
doublex=x0+velx*time;
doubley=y0+vely*time-0.5*gravity*time*time;
qrectr=qrect(0,0,6,6);
r.movecenter(qpoint(qround(x),height()-1-qround(y)));
returnr;
}
这个私有函数计算炮弹的中心点并且返回封装炮弹的矩形。
它除了使用自动增加所过去的时间的timercount之外,还使用初始时的加农炮的力量和角度。
运算公式使用的是有重力的环境下光滑运动的经典牛顿公式。
简单地说,我们已经选择忽略爱因斯坦理论的结果。
我们在一个y坐标向上增加的坐标系统中计算中心点。
在我们计算出中心点之后,我们构造一个6*6大小的qrect,并把它的中心移动到我们上面所计算出的中心点。
同样的操作我们把这个点移动到窗口部件的坐标系统(请看坐标系统)。
qround()函数是一个在qglobal.h中定义的内嵌函数(被其它所有qt头文件包含)。
qround()把一个双精度实数变为最接近的整数。
(3)t11/main.cpp
classmywidget:
publicqwidget
{
public:
mywidget(qwidget*parent=0,constchar*name=0);
};
唯一的增加是shoot按钮。
qpushbutton*shoot=newqpushbutton(&shoot,this,shoot);
shoot->setfont(qfont(times,18,qfont:
:
bold));
在构造函数中我们创建和设置shoot按钮就像我们对quit按钮所做的那样。
注意构造函数的第一个参数是按钮的文本,并且第三个是窗口部件的名称。
connect(shoot,signal(clicked()),cannonfield,slot(shoot()));
把shoot按钮的clicked()信号和cannonfield的shoot()槽连接起来。
行为
thecannoncanshoot,buttheresnothingtoshootat.
第二个例子
intqtimer:
:
start(intmsec,boolsshot=false)
analogclock
thisexampledisplaysananalogclockwidget.
#ifndefaclock_h
#defineaclock_h
#include<qwidget.h>
#include<qdatetime.h>
classanalogclock:
publicqwidget//analogclockwidget
{
q_object
public:
analogclock(qwidget*parent=0,constchar*name=0);
voidsetautomask(boolb);
publicslots:
voidsettime(constqtime&t);
protected:
voidupdatemask();
voidpaintevent(qpaintevent*);
voidmousepressevent(qmouseevent*);
voidmousemoveevent(qmouseevent*);
privateslots:
voiddrawclock(qpainter*);
voidtimeout();
private:
qpointclickpos;
qtimetime;
};
#endif//aclock_h
#includeaclock.h
#include<qtimer.h>
#include<qpainter.h>
#include<qbitmap.h>
//constructsananalogclockwidgetthatusesaninternalqtimer.
analogclock:
:
analogclock(qwidget*parent,constchar*name)
:
qwidget(parent,name)
{
time=qtime:
:
currenttime();//getcurrenttime
qtimer*internaltimer=newqtimer(this);//createinternaltimer
connect(internaltimer,signal(timeout()),slot(timeout()));
internaltimer->start(5000);//emitsignalevery5seconds}
voidanalogclock:
:
mousepressevent(qmouseevent*e)
{
if(istoplevel())
clickpos=e->pos()+qpoint(geometry().topleft()-framegeometry().topleft());}
voidanalogclock:
:
mousemoveevent(qmouseevent*e)篇二:
在vs2010中使用qt编程
在vs2010中使用qt编程
一、安装所需软件
1.下载安装vs2010,以及sp1补丁包;
2.下载qt-win-opensource-4.8.2-vs2010.exe,并安装。
这里我们假设安装在c:
\qt\4.8.2下;
3.下载qt-vs-addin-1.1.11-opensource.exe,并安装。
这三个软件安装好后,在vs的菜单界面上就会出现qt选项了。
二、环境配置
1.用vs新建一个win32控制台应用程序,我们假设工程名为:
hello。
2.选择工具->选项->项目和解决方案->vc++目录。
(1)选择“可执行文件”,在里面添加:
c:
\qt\4.8.2\bin;
(2)选择“包含文件”,在里面添加:
c:
\qt\4.8.2\include;c:
\qt\4.8.2\include\qt;c:
\qt\4.8.2\include\qtcore;c:
\qt\
4.8.2\include\qtgui
(3)选择“库文件”,在里面添加:
c:
\qt\4.8.2\lib;
三、开始编程(这里举一个简单的例子)
1.选择菜单上的“qt”选项->“launchdesigner”,启动designer:
放入一个“label”,内容写为:
helloqt。
然后保存为hello.ui,再将它添加到源文件中。
右击“hello.ui”->“属性”->“项类型”->“自定义生成工具”:
命令行:
uic.exehello.ui-ohelloui.h
输出:
helloui.h
附加依赖项:
uic.exe;hello.ui
然后,点击“确定”。
这时再右击“hello.ui”,选择“编译”,则会生成helloui.h。
将它添加到工程中。
(1)“常规”:
选择“字符集”为“使用多字节字符集”;
(2)“调试”:
填写“环境”值为:
path=c:
\qt\4.8.2\bin;
填写“合并环境”值为:
是;
(3)“链接器”:
进入“常规”选项,填写“附加库目录”为:
c:
\qt\4.8.2\lib;进入“输入”选项,填写“附加依赖项”为:
qtcore4.lib;qtgui4.lib;
四、调试运行
到了这里,运行程序,则可正常编译,成功运行。
篇三:
《嵌入式系统原理及应用》授课计划-执行
福建工程学院
学期授课计划
2011–2012学年第2学期
教师姓名汤龙梅课程名称嵌入式系统原理及应用教材《arm&linux嵌入式系统教程》
马忠梅等北京航空航天大学出版社专业、班级计算机0901-0904、软件工程0901-0902编写教师(签名)编写日期2012年2月教研室主任(签名)系、部负责人审核(签名)篇四:
qt开发手册
目录第一章linux图形用户界面gui介绍.....................................................................................1
1.1常用gui介绍...................................................................................................................1
1.2关于qt...............................................................................................................................2
1.3qt/embedded简介.............................................................................................................4
1.4qtopia介绍.........................................................................................................................4
第二章qt的安装..........................................................................................................................6
2.1qtx11的安装....................................................................................................................6
2.2qt/embedded安装..............................................................................................................9
2.3qtopia编译.......................................................................................................................11第三章qt的编程........................................................................................................................12
实验一―helloword!
‖qt初探............................................................................................12
实验二创建一个窗口并添加按钮.......................................................................................17
实验三对象间通信:
signal和slot机制........................................................................20
实验四菜单和快捷键...........................................................................................................29
实验五工具条和状态栏.......................................................................................................38
实验六鼠标和键盘事件.......................................................................................................48
实验七对话框.......................................................................................................................63
实验八qt中的绘图..............................................................................................................75
实验九qt中的多线程编程..................................................................................................85
实验十qt中的网络编程......................................................................................................97第四章qt常用工具的介绍......................................................................................................111
4.1qt设计器(qtdesigner)............................................................................................111
4.2tmake..............................................................................................................................113
4.3qvfb.......................................................................