QT入门.docx

上传人:b****6 文档编号:6231435 上传时间:2023-01-04 格式:DOCX 页数:36 大小:39.66KB
下载 相关 举报
QT入门.docx_第1页
第1页 / 共36页
QT入门.docx_第2页
第2页 / 共36页
QT入门.docx_第3页
第3页 / 共36页
QT入门.docx_第4页
第4页 / 共36页
QT入门.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

QT入门.docx

《QT入门.docx》由会员分享,可在线阅读,更多相关《QT入门.docx(36页珍藏版)》请在冰豆网上搜索。

QT入门.docx

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进去.

#################################################################

#form1.cpp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1