QT入门Word文档下载推荐.docx
《QT入门Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《QT入门Word文档下载推荐.docx(36页珍藏版)》请在冰豆网上搜索。
![QT入门Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/4/0d2573c1-3bd8-4f15-bdbf-8248ba7a1714/0d2573c1-3bd8-4f15-bdbf-8248ba7a17141.gif)
程式的速度.利用QTDesigner可以用一种所见既所得的方式,来产生QT程式的
GUI介面的程式码.通过增加一些功能,就可以完成一个程式了.利用QTDesigner
可以非常快速的学会QT,而我们这里说利用QTDesigner来学习QT而不是利用
QTDesigner来写QT,这里的区别就在於,QTDesigner所产生的程式码有些繁琐.
跑起来也比较的慢些.我们这里只是利用QTDesigner来帮助我们学习.而不是直接
去跑QTDesigner生成的程式码.
3.基本要求
因为这篇文章主要是告诉大家如何利用QTDesign来达到快速学习QT的.
所以您最也要做到∶
您需要有一台可以跑Linux的电脑或者MicrosoftWindows的电脑
足够的RAM和HardDisk用以安装、编译QT
您的Linux中需要安装有KDE、QT、QTDesigner、g++等等程式.
您如果适用MicrosoftWindows,则您需要VC++和QTForWindows
Linux的使用者最好还能安装一个Kdevelop(一个非常好的用来开发QT的DevelopEnverment)
4.QTDesigner
简单的介绍--从PushButton开始
假设您一切都安装好了.现在我们打开QTDesigner吧.打开後,选择New->
Dialog
这时侯,您的QTDesigner中就会出现一个From1来.现在我们click一下上面的tools中
的那个pushbutton,(标有OK的图标)并且用mouse选择到一定的大小.在这个pushbutton
上面用您的mousedoubleclick一下.我们就可以改变pushbutton的label了.这里我们把
pushbutton1这几个字,换成Exit,然後直接按Enter或者用mouse选择OK也可以.现在我们
看到,那个button中的标签已将变成Exit了.我们这时侯还需要给这个ExitButton一个
signal(信号),这样当您在Exit这个Button上click的时侯.QT才知道如何去处理这个信
号.我们按一下F3(connectsingnalslot)然後在那个ExitButton上面Click一下.这时
侯我们就看到了EditConnection的Dialog了.在Signal中选择clicked,在slot中,先选
择setFocus()就好了.这时侯选择OK.我们就算是完成了.如果想看看这个小程式长什麽样子.
可以用CTRL+T来看PreView.(seefigure1)
figure1
首先在您的$HOME中建立一个qt_program的Directory出来.这个Directory将会
作为我们存放文件的地方.现在我们用File->
Save把这个文件存为form1.ui放在$HOME/qt_program
的目录下.现在如果大家打开form1.ui来看一看.会发现那是一堆有很多的东西.所以我们需要用一个叫做uic的程式来把.ui文件转换成QT可以使用的.cpp和.h文件.
用下面的指令就可以生成我们需要的.h文件了
uic-oform1.hform1.ui
而生成.cpp文件则需要用以下的指令∶
uic-iform1.h-oform1.cppform1.ui
这时侯,form1.h中就会看到一个标准的QT需要的.h文件
1.#ifndefFORM1_H
2.#defineFORM1_H
3.#include
4.#include
5.classQVBoxLayout;
6.classQHBoxLayout;
7.classQGridLayout;
8.classQPushButton;
9.classForm1:
publicQDialog
10.{
11.Q_OBJECT
12.public:
13.Form1(QWidget*parent=0,constchar*name=0,boolmodal=FALSE,WFlagsfl=0);
14.~Form1();
15.QPushButton*PushButton1;
16.};
17.#endif//FORM1_H
1-2:
定义FORM1.H这个文件
3-4:
这里是我们需要用到的两个.h文件
5-7:
我们根本用不到,qtdesigner自己产生的
8:
QPushButton需要用到这个class
9-11:
我们的form1是based在QDialog上面的
12:
公开的(可以在以後的程式中使用.用过C++的人一定明白)
13:
Form1的架构
14:
清除Form1
15:
产生一个pushbutton(就是那个标有exit的按钮
17:
结束对FORM1.H的定义
而form1.cpp文件如下:
1.#include"
form1.h"
2.#include
5.#include
6.#include
7./*
8.*ConstructsaForm1whichisachildof'
parent'
withthe
9.*name'
name'
andwidgetflagssetto'
f'
10.*
11.*Thedialogwillbydefaultbemodeless,unlessyouset'
modal'
to
12.*TRUEtoconstructamodaldialog.
13.*/
14.Form1:
:
Form1(QWidget*parent,constchar*name,boolmodal,WFlagsfl)
15.:
QDialog(parent,name,modal,fl)
16.{
17.if(!
name)
18.setName("
Form1"
);
19.resize(596,480);
20.setCaption(tr("
));
21.PushButton1=newQPushButton(this,"
PushButton1"
22.PushButton1->
setGeometry(QRect(130,160,161,71));
23.PushButton1->
setText(tr("
Exit"
24.//signalsandslotsconnections
25.connect(PushButton1,SIGNAL(clicked()),PushButton1,SLOT(setFocus()));
26.}
27./*
28.*Destroystheobjectandfreesanyallocatedresources
29.*/
30.Form1:
~Form1()
31.{
32.//noneedtodeletechildwidgets,Qtdoesitallforus
33.}
1:
我们上面的定义文件
2:
pushbutton所需要的.h文件
3-6:
7-13:
QTDesigner产生的注解
14-15:
Form1的结构
17-18:
如果Form1:
Form1中没有pass一个名子过来.那麽就命名为Form1
19:
resize
20:
把显示出来的那个Dialog的名子定为Form1,也就是window中左上角的字
21:
做出一个新的button,名子为PushButton1
22:
这里设定了pushbutton在这个dialog中的位置.Qrect(130,160,161,71)这里是说在一
个Dialog中,以左边最上面来算,位置是(0,0),所以说,这里的130(横向)和160(纵向)就是说我
们从(0,0)开始,往左边跑130,往下跑160.这样我们就算出了pushbutton这个按钮画在那里了.後面的161,
71则是定义这个pushbutton到底要画多大,设定了长和高
23:
通过呼叫setText指令,我们可以在这个button上面给入我们需要的文字.这里是Exit
24:
25:
上面就是处理当接收到clicked的信号(singal)以後,我们所作的事情(setFocusonPushButton1)
connect这里是告诉程式连接一个信号,PushButton1,SIGNAL(clicked()),是说信号是由PushButton1发出,
发出的信号为mouseclicked,PushButton1,SLOT(setFocus())表示信号发出以後,目标(Object)为PushButton,
event是setFocus()动作
26:
主程式结束
27-29:
QTDesigner的注解
30-33:
由於我们要常常用到QTDesigner,也就是说,需要常常用到uic这苹程式.为了省去每次都要
打一堆东西的麻烦.我们来写一各小script来处理.ui档案.
不难看出,uic在处理/生成.h.cpp档案的时侯,用到了两个指令∶
所以我们的script就写成∶
###############################################################
#!
/bin/sh#
#myuicprogramconvert.uito.cpp.hbycallinguic#
#
INPUT_UI=$@#
#这里读取外面传回来的文件名#
if[!
-f"
$INPUT_UI"
]#
then#
echo"
UICFile$INPUT_UINotFound"
#
echo#
Useragemyuicinput_file.ui"
exit1#
fi#
#上面的语句检查我们所输入的.ui文件是否存在#
#如果找不到指定的.ui文件,则显示一个简短的#
#使用说明#
INPUT_H=`echo$@|cut-d'
.'
-f1`.h#
#这里我们利用cut来处理输入的.ui文件.#
#得到一个.h的文件名#
INPUT_CPP=`echo$@|cut-d'
-f1`.cpp#
#同样的道理,利用cut产生一个.cpp的文件名#
uic-o$INPUT_H$INPUT_UI#
#这里就是利用.ui产生.h的文件#
uic-i$INPUT_H-o$INPUT_CPP$INPUT_UI#
#利用.h和.ui产生.cpp文件.#
我门把这个文件存为myuic.并切chmod+x变成可执行档案.
然後cp到/usr/bin上面.如果您在电脑中没有root的权限.
可以在自己的$HOME目录中做一个bin的Directory出来.
然後去编辑您的.bash_profile(这里假设您用的是bash)
如果您的.bash_profile中本身已经有了PATH这段文字,那麽
您只要在原本的PATH後面加上:
$HOME/bin就可以了.如果没有
那麽就在您的.bash_profile中写入∶
PATH=$PATH:
$HOME/bin
exportPATH
这样您以後就可以直接执行myuic这个文件了.现在试试看用myuic来处理
刚刚的那个form1.ui这个文件吧.先把旧的.h.cpp都删除掉∶
rm-f*.cpp*.h
然後用myuic来生成新的.cpp.h文件∶
myuicform1.ui
这时候用ls就会看到form1.cppform1.hform1.ui这三个文件了
这时侯我们只需要写一个小的main.cpp就可以编译form1.cpp了.
main.cpp非常的简单
#include"
#include
intmain(intargc,char**argv)
{
KApplicationapp(argc,argv,"
);
//KDE是建立在QT的基础上得所以KApplication
//所以kapp.h实际上包含了qapplication.h
Form1*form1=newForm1();
form1->
show();
app.setMainWidget(form1);
return(app.exec());
}
基本上来说,很简单.然後当然就是编译啦.我建议写出来的东西都用Kdevelop来解决.首先Kdevelop
介面非常的友善.又能省下写Makefile的麻烦.打开Kdevelop以後,选择项目->
新建,KDE2-Normal,
然後选择Next,在这一页中.注意不要在任何选项中打"
x"
因为我们用不到.反而会增加麻烦.最後
一直next,然後create,exit.这时侯我们就已经有一个新的项目可以用了.在menu中选择:
项目->
添加现存文件.然後把qt_program中的form1.cppform1.h和main.cpp加入.这时候只要按
一下F9,Kdevelop就会自动帮您把程式compile出来.并且执行.程式执行後,我们不能用click那个
ExitButton退出程式.因为我们并没有给他退出的信号.现在让我们来把程式码作些改动∶
###########################################################
#form1.h
#ifndefFORM1_H
#defineFORM1_H
classQPushButton;
classForm1:
Q_OBJECT
public:
Form1(QWidget*parent=0,constchar*name=0);
QPushButton*PushButton1;
};
#endif//FORM1_H
#################################################################
#form1.cpp
Form1:
Form1(QWidget*parent,constchar*name):
QDialog(parent,name)
setCaption(tr("
Form21"
));
PushButton1=newQPushButton(this,"
PushButton1->
setGeometry(QRect(130,160,161,71));
PushButton1-vsetText(tr("
connect(PushButton1,SIGNAL(clicked()),kapp,SLOT(quit()));
~Form1(){}
####################################################################
main.cpp保持不变.经过一番简化.程式码马上简单很多了.
这里我们除了把一些由QTDesign做出的不必要的code挑除以外.对form1.cpp
做了两个小改动.
1.增加了#include这个headfile.
2.我们把∶
connect(PushButton1,SIGNAL(clicked()),PushButton1,SLOT(setFocus()));
改变为
同样的信号传送,但是目标对象有所改变.现在目标将作用在kapp上面也就是我们
的主程式(mainapplication),而SLOT则是呼叫quit(),现在Kdevelop中更改
程式码.然後按下F9.等待程式运行.这时侯我们的程式,只要在那个Exit的Button
上面用mouseclick一下.这个程式就完全关闭了.
现在我们在这个PushButton中再增加一些功能.我们来看看QTDesigner中的ToolTip
功能.如果您的QTDesigner中PropertyEdit并没有自动出现.那麽请在QTDesigner
中选择Menu中的Windows然後选择PropertyEdit.只要在PushButton1那个Button
上面用mouseclick一下.就可以对Pushbutton1的Property进行编辑.在Property
Edit中的ToolTip後面可以进行文字输入的地方,打入下面的文字∶
ClickOnthisButtonWillExitMainWindow.
然後sava文件.(Form1.ui)在用我们的小script呼叫uic程式把,Form1.ui转成
Form1.h和Form1.cpp
这时侯我们来观察生成的form1.cpp文件,我们会发现现在这里面比一前多了些东西.
现在这里多了一行:
QToolTip:
add(PushButton1,tr("
ClickeOnthisButtonWillExitMainWindow."
这里,我们用QToolTip中的add,在Object(PushButton1)上面加入"
ClickeOnthisButton
WillExitMainwindow."
这个字幕.现在我们在前面那个被我们简化的form1.cpp中,加入上面那
行程式码,因为我们需要调用到QToolTip所以我们也要把qtooltip.h给include进去.
#form1.cpp