LinuxQt4用 QT Designer 来快速学习 QT.docx
- 文档编号:30509466
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:40
- 大小:296.02KB
LinuxQt4用 QT Designer 来快速学习 QT.docx
《LinuxQt4用 QT Designer 来快速学习 QT.docx》由会员分享,可在线阅读,更多相关《LinuxQt4用 QT Designer 来快速学习 QT.docx(40页珍藏版)》请在冰豆网上搜索。
LinuxQt4用QTDesigner来快速学习QT
用QTDesigner来快速学习QT
写在前面∶
这里只是告诉大家一种如何快速学习QT的方法.这里也只对QTDesigner和QT作一个简单的介绍.让没有写过QT的人能对QT有一个初步的认识.如果您真的对QTProgramming很有兴趣.这里我建议您去看看O'REILY出版的ProgrammingwithQT和Bible出版的KDE2/QTProgramming.这两本书将会给您带来一个好的开始.
这篇文章适合您吗?
这篇文章只是对QT的一个入门介绍.如果您有兴趣认识一下QT这种语言,那麽这篇文章就很适合您了.
如果您对C++能有一些的了解,那麽您将会很轻松的看完这篇文章.如果您什麽程式语言也没有学过.但也想一窥QT的容貌.那麽也没有关系.这里都是些非常间单的东西.
也需会成为您学习写程式的一个起点.
如果您本身已经在开发、学习QT/KDE或者Xwindow有关的程式设计.那就只能当是打发时间看看玩了.这篇短短的文章没有写到很多的东西.对於这些高手们,我唯一能提供的一个经验就是多多去看$QTDIR/include下面的东西.
1.什麽是QT.
用Linux的人,一定都知道QT是什麽.而利用QT编译出来的KDE桌面系统,更是让Linux有了一次能和Windows的GUI相媲美的机会.甚至有人说,KDE的桌面在图形上,还胜过了Windows95了.那麽QT到底是什麽呢?
其实QT
就是基於C++语言上的一种专门用来开发GUI介面的程式.这里面包括了∶button;label;frame...等等很多的可以直接调用的东西.
2.为什麽选择QT
2.1QT是基於C++的一种语言
相信C/C++目前还是一种很多人都在学习的语言.QT的好处就在於QT本身可以被称作是一种C++的延伸.QT中有数百个class都是用C++写出来的.这也就是说,QT本身就具备了C++的快速、简易、Object-OrientedProgramming
(OOP)等等无数的优点.
2.2QT具有非常好的可移植性(Portable)
QT不只是可以在Linux中运作.也同样可以运行在MicrosoftWindows中.这也就意味者,利用QT编写出来的程式,在几乎不用修改的情况下,就可以同时在Linux中和MicrosoftWindows中运行.QT的应用非常之广泛,从Linux到Windows从x86到Embedded都有QT的影子.
3.什麽是QTDesigner
简单的来说QTDesigner是一个GUI的工具.这个工具可以帮助我们来加快写QT程式的速度.利用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来看一看.会发现那是一堆有很多<tag&g;的不知道是什麽的东西.所以我们需要用一个叫做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<qvariant.h>
4.#include<qdialog.h>
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<qpushbutton.h>
3.#include<qlayout.h>
4.#include<qvariant.h>
5.#include<qtooltip.h>
6.#include<qwhatsthis.h>
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("Form1"));
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:
我们根本用不到,qtdesigner自己产生的
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:
QTDesigner产生的注解
25:
上面就是处理当接收到clicked的信号(singal)以後,我们所作的事情(setFocusonPushButton1)connect这里是告诉程式连接一个信号,PushButton1,SIGNAL(clicked()),是说信号是由PushButton1发出,发出的信号为mouseclicked,PushButton1,SLOT(setFocus())表示信号发出以後,目标(Object)为PushButton,event是setFocus()动作
26:
主程式结束
27-29:
QTDesigner的注解
30-33:
清除Form1
由於我们要常常用到QTDesigner,也就是说,需要常常用到uic这苹程式.为了省去每次都要打一堆东西的麻烦.我们来写一各小script来处理.ui档案.不难看出,uic在处理/生成.h.cpp档案的时侯,用到了两个指令∶
uic-oform1.hform1.ui
uic-iform1.h-oform1.cppform1.ui
所以我们的script就写成∶
###############################################################
#!
/bin/sh #
#myuicprogramconvert.uito.cpp.hbycallinguic #
#
INPUT_UI=$@ #
#这里读取外面传回来的文件名 #
#
#
if[!
-f"$INPUT_UI"] #
then #
echo"UICFile$INPUT_UINotFound" #
echo #
echo"Useragemyuicinput_file.ui" #
echo #
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.cpp form1.h form1.ui这三个文件了
这时侯我们只需要写一个小的main.cpp就可以编译form1.cpp了.
main.cpp非常的简单
#include"form1.h"
#include<kapp.h>
intmain(intargc,char**argv)
{
KApplicationapp(argc,argv,"Form1");//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
#include<qdialog.h>
classQPushButton;
classForm1:
publicQDialog
{
Q_OBJECT
public:
Form1(QWidget*parent=0,constchar*name=0);
QPushButton*PushButton1;
};
#endif//FORM1_H
#################################################################
#form1.cpp
#include"form1.h"
#include<qpushbutton.h>
#include<kapp.h>
Form1:
:
Form1(QWidg
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LinuxQt4用 QT Designer 来快速学习 LinuxQt4 快速 学习
![提示](https://static.bdocx.com/images/bang_tan.gif)