QT关于控件的教程.docx
- 文档编号:11128064
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:46
- 大小:39.70KB
QT关于控件的教程.docx
《QT关于控件的教程.docx》由会员分享,可在线阅读,更多相关《QT关于控件的教程.docx(46页珍藏版)》请在冰豆网上搜索。
QT关于控件的教程
使用Linux纯属为了想了解UNIX下DB2运行和使用情况,而一直喜欢用的FreeBSD上好像不支持DB2数据库,反正我没有看到这方面资料。
如果有谁知道的话请你告诉我。
我的爱机配置较低,在Freebsd上使用GNOME作为X-Windws有点钝,KDE也就一直都没有尝试过。
在安装Linux时,忽然有想看看KDE的念头,于是一古脑全装上了,第一次用时觉得用KDE感觉也不满意,于是将KDE改为UNIX风格,没想到重新启动X-Windws后,速度一下快了起来,终于让我觉得可以顺利的工作了。
最近在学习Python编程,想看看在Linux工作下怎样,而无意发现了QTDesigner,再仔细一看竟然使用的是C++。
让我大为兴奋,C++再熟悉不过了,于是照着英文说明操练了一会,挺顺手的的,于是试着写了一代码,最后就是不会编译。
我的英语水平也有限,忙了半天了也有点累了。
今天在网上查了一些资料,终于对QTDesigner有些了解。
下面是我在网上看到的一篇文章,先收集以后再说吧。
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来看一看.会发现那是一堆有很多的东西.所以我们需要用一个叫做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
3.#include
4.#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("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.cppform1.hform1.ui这三个文件了
这时侯我们只需要写一个小的main.cpp就可以编译form1.cpp了.
main.cpp非常的简单
#include"form1.h"
#include
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
classQPushButton;
classForm1:
publicQDialog
{
Q_OBJECT
public:
Form1(QWidget*parent=0,constchar*name=0);
QPushButton*PushButton1;
};
#endif//FORM1_H
#################################################################
#form1.cpp
#include"form1.h"
#include
#include
Form1:
:
Form1(QWidget*parent,constchar*name):
QDialog(parent,name)
{
setCaption(tr("Form21"));
PushButton1=newQPushButton(this,"PushButton1");
PushButton1->setGeometry(QRect(130,160,161,71));
PushButton1-vsetText(tr("Exit"));
connect(PushButton1,SIGNAL(clicked()),kapp,SLOT(quit()));
}
Form1:
:
~Form1(){}
####################################################################
main.cpp保持不变.经过一番简化.程式码马上简单很多了.
这里我们除了把一些由QTDesign做出的不必要的code挑除以外.对form1.cpp
做了两个小改动.
1.增加了#include这个headfile.
2.我们把∶
connect(PushButton1,SIGNAL(clicked()),PushButton1,SLOT(setFocus()));
改变为
connect(PushButton1,SIGNAL(clicked()),kapp,SLOT(quit()));
同样的信号传送,但是目标对象有所改变.现在目标将作用在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
myuicform1.ui
这时侯我们来观察生成的form1.cpp文件,我们会发现现在这里面比一前多了些东西.
现在这里多了一行:
QToolTip:
:
add(PushButton1,tr("ClickeOnthisButtonWillExitMainWindow."));
这里,我们用QToolTip中的add,在Object(PushButton1)上面加入"ClickeOnthisButton
WillExitMainwindow."这个字幕.现在我们在前面那个被我们简化的form1.cpp中,加入上面那
行程式码,因为我们需要调用到QToolTip所以我们也要把qtooltip.h给include进去.
##########################################################
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QT 关于 控件 教程