版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux下QT图形界面开发第1页:概述(1) 第2页:用快速开发工具Qt Designer编写Qt程序 第3页:信号和槽 第4页:在终端窗口中Qt编程信号的应用实例 第5页:Qt介绍 概述(1)一、QT简介Qt是一个跨平台的C+图形用户界面库,.由挪威TrollTech公司出品,目前包括Qt/X11,基于Frambuffer的Qt Embedded,快 速开发工具Qt Designer几国际化工具Qt Linguist等Qt支持Unix及Linux系统,还支持 Windows NT/Windows 2k及Qindows 95/98平台.Qt的良好封装机制使其模块化程度非常高,可重用性较好.Q
2、t/Embeded是面向嵌入式系统的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C+ GUI和基于Linux的嵌入式品台开发工具。Qt/EmbededAPI可用于多种开发项目。许多基于Qt的XWindow程序可以非常方便地移植到嵌入式版本。下面我们就从实际应用中认识Qt.二、在终端下编写Qt程序我们先要介绍在终端窗口编写Qt程序打开一个终端,建立一个文件夹,如:mkdir hello然后进入这个文件夹:cd hello创建c+文件,vi hello.cpp在文件中键入下面的代码:#include #include int main(int argc,char *argv)QAppli
3、cation app(argc,argv);QLabel *label=new QLabel(Hello Qt!,0);app.setMainWidget(label);label-show();return app.exec();然后我们用qt的工具qmake来生成工程文件:qmake -project大家可以用ls查看一下,是不是多了一个名为的工程文件接下来是生成Makefile文件:qmake 呵呵,ls一下,Makefile终于看到你的.接下来就是make了,等上一段时间运行程序./hello下面是界面:下面我们来讲解上面的程序:#include 这
4、一行包含了QApplication类的定义。在每一个使用Qt的应用程序中都必须使用一个QApplication对象。QApplication管理了各种各样的应用程序的广泛资源,比如默认的字体和光标。#include 这一行包含了QPushButton类的定义。参考文档的文件的最上部分提到了使用哪个类就必须包含哪个头文件的说明。QPushButton是一个经典的图形用户界面按钮,用户可以按下去,也可以放开。它管理自己的观感,就像其它每一个QWidget。一个窗口部件就是一个可以处理用户输入和绘制图形的用户界面对象。程序员可以改变它的全部观感和它的许多主要的属性(比如颜色),还有这个窗口部件的内容
5、。一个QPushButton可以显示一段文本或者一个QP main( int argc, char *argv )main()函数是程序的入口。几乎在使用Qt的所有情况下,main()只需要在把控制转交给Qt库之前执行一些初始化,然后Qt库通过事件来向程序告知用户的行为。argc是命令行变量的数量,argv是命令行变量的数组。这是一个C/C+特征。它不是Qt专有的,无论如何Qt需要处理这些变量(请看下面)。QApplication a( argc, argv );a是这个程序的QApplication。它在这里被创建并且处理这些命令行变量在任何Qt的窗口系统部件被使用之前创建
6、QApplication对象是必须的。QPushButton hello( Hello world!, 0 );这里,在QApplication之后,接着的是第一个窗口系统代码:一个按钮被创建了。这个按钮被设置成显示“Hello world!”并且它自己构成了一个窗口(因为在构造函数指定0为它的父窗口,在这个父窗口中按钮被定位)。hello.resize( 100, 30 );这个按酒被设置成100像素宽,30像素高(加上窗口系统边框)。在这种情况下,我们不用考虑按钮的位置,并且我们接受默认值。a.setMainWidget( &hello );这个按钮被选为这个应用程序的主窗口部件。如果用户
7、关闭了主窗口部件,应用程序就退出了。你不用必须设置一个主窗口部件,但绝大多数程序都有一个。hello.show();当你创建一个窗口部件的时候,它是不可见的。你必须调用show()来使它变为可见的。return a.exec();这里就是main()把控制转交给Qt,并且当应用程序退出的时候exec()就会返回。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。用快速开发工具Qt Designer编写Qt程序三、用快速开发工具Qt Designer编写Qt程序 我们用的开发系统是Linux,开发工具是Qt Designer.如果大家安装完整版的Linux,系统就带
8、这个工具了.大家可以点击应用程序编程Qt Designer来找到它Qt Designer首先呈现给用户的是一个New/Open对话框。因为这里要创建一个C+程序,所以在此选择C+ Project,点击“OK”继续。选择一个想要保存文件的位置,并且给出一个文件名,注意这里文件名的扩展名一定要是.pro。点击“OK”后,到下面的界面现在我们看到的就是Qt Designer主窗口,确保Property Editor可见。如果它是不可见的,用户可以通过WindowsViewsProperty Editor/Signal Handlers选单选项来使其可见下面我们建立一个如下图所示的对话框通过选择Fil
9、eNew选单,然后选择Dialog来创建一个新的对话框。这时Qt Designer会创建一个新的空白对话框,用户可以在其上放置输入框和按钮。打开Property Editor,把name的值改为“MainForm”,把caption的值改为“Hello world”。 然后我们在对话框上拖拽上一个lable,方法是在左面Toolbox的common widgets里的TextLabel,然后在空白对话框上画一下.改一下caption的值改为“Hello world”就得到如下的界面了.现在就已经基本完成这个应用程序了。不过在编译和运行此应用程序之前,还要创建一个main.cpp文件。方法是选择
10、FileNewC+Main- File(main.cpp),只需接受缺省的配置即可。main.cpp会自动在Code Editor中打开。因为这里无需改变main.cpp中的 任何东西,所以直接将Code Editor窗口关闭,并且保存main.cpp。到此为止,在Qt Designer中的工作已经完成了。保存整个项目,下面来编译和运行这个程序。在编译程序之前,要首先生成它的Makefile文件。打开一个终端,然后切换至保存有项目的位置,使用以下命令来生成Makefile文件:#qmake -o Makefile hellopro现在,就可以运行make来编译程序了,根据系统的性能,这个步骤需
11、要花费一点时间。当编译工作完成后,输入./hello来运行程序。如果一切正常,用户应该已经看到程序了。下面是我电脑上程序的界面:到这里我们完成了第一个Qt的程序,怎么样呢,是不是有点小成就感这里我还有个建议:最好把每一个项目单独放在一个文件夹里这样就可以让我们更方便的使用QT为我们提供的工具,例如qmake等。信号和槽一、信号和槽 Qt的一项重要的机制就是它的信号和槽,在图形用户界面编程中,经常需要将一个窗口部件的变化通知给另一个窗口部件,或者说系统对象进行通信.一般的图形用户编程中采用回调函数进行对象间通信(如:gtk+),这样回调函数和处理函数捆绑在一起,但这样做没有信号和槽机制简便和灵活
12、.如Qt的窗口部件有多个预定义的信号,槽是一个可以被调用处理特定信号的函数.Qt的窗口部件有多个预定义的槽,当一个特定的时候发生的时候,一个信号被发射,对信号感兴趣的槽就会调用对应响应函数.信号槽机制在QObject类中实现,从QObject类或其一个子类继承的所有类可以包含信号和槽当对象改变其状态的时候,信号被发送,对象不关心有没有其他对象接收到这信号槽是类的正常成员函数,可以将信号和槽通过connect函数任意相连当一个信号被发射,它所连接的槽会被立即执行,如同一个普通函数调用一样槽是普通成员函数,它和普通成员函数一样分为public、protected和private共3类。Public
13、 slots表示声明是任何信号都可以相连的槽;protected slots表示这个类的槽及其子类的信号才能连接;private slots表示这个类本声的信号可以连接这个类的槽。二、 在Qt Designer中信号应用实例下面我们用一个实例来了解信号的用法.首先我们新建一个文件夹:#mkdir /root/Desktop/qt/signal我们打开Qt创建项目,项目路径为 /root/Desktop/qt/signal/从菜单栏的 File-New 打开新建对话框,选择第二个:Dialog,然后也同样保存到刚刚创建的文件夹下。这时侯,你的 QT Designer 中就会出
14、现一个 From1 来. 更改右下角那个窗口里的name 改为MainFrom.把caption的值改为signal.然后我们从左面的Toolbox拖拽一个PushButton.并把name改为ExitButton,把text改为Exit.下面是效果图:到这里我们已经把页面设置完了,下面我们为ExitButton设置信号函数. 我们按一下 F3(或者有菜单栏选择 Edit-Connections ),然後在那个 “Exit” 按钮上点击一下。这时侯我们就看到了View and Edit Connection 页面了. 在Signal中选择clicked,在slot中,先选择close()就好了
15、,在 Reciever中选择MainFrom.这时侯选择OK. 我们就算是基本完成了。保存下。 如果想看看这个小程序长什麽样子.可以用 CTRL+T来看 PreView. 我们现在还不能编译这个程序,为什么呢?对了因为我们还缺少一个main.cpp。想一想上一章怎样创建的了。从菜单栏的File-New打开新建对话框,选择最后一个:C+ MainFile(main.cpp).好了,现在来编译我们的程序。先打开一个终端,然后切换到我们建立工程的目录。然后利用Qt的工具生成Makefile文件。# qmake编译:# make运行:# ./signal点击Exit按扭,程序退出。三、在Qt Desi
16、gner中槽应用实例下面我们要做一个加法器。打开Qt,新建名为slot的工程文件,然后再新建如下图所示的界面:修改要显示结果的label的name为textLableresult.并把其text清空.把确定按扭的name改为AddButton.好了,我们已经把页面设置好了.我们现在要做的就只有使用户按AddButton按扭时textLableresult能够显示lineEdit1和lineEdit2的和.所以我们必须对AddButton的clock信号设置一个槽.首先按一下 F3(或者有菜单栏选择 Edit-Connections ),然后在AddButton按钮上点击一下这时侯我们就看到了V
17、iew and Edit Connection的页面了。在Signal中选择clicked, 在Receiver中选择MainForm.在Slot中,都是QT为我们准备好的槽,我们需要建立自己的槽.点击右边的“Edit Slots.”按钮,然后就可以看见 Edit Functions 窗口,该窗口也可以通过“主菜单 Edit-Slots” 打开。点击 New Function 按钮,将newSlot()改为 add() ,然后选择 OK。这时我们已经建立了一个槽,我们再回到 View and Edit Connection对话框中,在 Slot 中我们现在看到了刚刚自己创建的槽add(),我们
18、选择它.这样就可以使AddButton的信号与add()槽关联起来了。我们还需要向add()槽里写一些代码,使它能够完成加法功能.在主窗体form_main的空白处双击鼠标左键,弹出对话框Creating ui.h file,我们选择Yes,然后可以看到一个编辑窗口。如下图所示:我们需要在 void MainForm:add()中添加如下的代码:void MainForm:add() QString str1,str2,strResult; double add1=0.0,add2=0.0,result0.0; str1=lineEdit1-text(); str2=lineEdit2-tex
19、t(); Bool ok1=FALSE,ok=FALSE; add1=str1.toDouble(&ok1); add2=str2.toDouble(&ok2); if(ok1&ok2) result=add1+add2; strResult.sprintf(%f,result); textLabelResult-setText(strResult); 到这里我们编辑的工作就都结束了,我们先保存。然后打开一个终端,改变当前目录为我们保存项目的目录,然后生成Makefile文件:#qmake编译:# make运行:# ./ slot下面是我运行的界面:在终端窗口中Qt编程信号的应用实例四、在终端
20、窗口中Qt编程信号的应用实例打开一个终端,用vi建立一个文件t2.c,键入如下程序:#include #include int main( int argc, char *argv )QApplication a( argc, argv ); /创建QApplication对象QPushButton quit( Quit, 0 ); /添加一个按扭,因为这个按钮是一个顶层窗口,我们把0作为它的父对象quit.resize( 75, 30 ); /设置按扭尺寸QObject:connect( &quit, SIGNAL(clicked(), &a, SLOT(quit() );/ quit按扭的
21、clicked信号与QApplication对象的quit()槽连接a.setMainWidget( &quit ); /设置a为这个应用程序的主窗口部件quit.show(); /显示quti按扭return a.exec(); 生成工程文件:qmake -project生成makefileqmake编译mnake下面是界面截图:用户点击按扭,程序退出6.1.2 Qt介绍Qt是一个跨平台的C+图形用户界面库,由挪威TrollTech公司出品,目前包括Qt、基于FrameBuffer的Qtopia Core、快速开发工具Qt Designer和国际化工具Qt Linguist等部分。Qt支持所
22、有的UNIX系统,当然也包括Linux系统,还支持WinNT/Win2k、Windows 95/98平台。基本上Qt同X-Window上的Motif、Openwin、GTK等图形界面库和Windows平台上的MFC、OWL、VCL、ATL是同类型的。不过Qt还具有下列一些优点。(1)优良的跨平台特性。Qt支持下列操作系统:Microsoft Windows 95/98、Microsoft Windows NT、Linux、Solaris、SunOS、HP-UX、Digital UNIX (OSF/1、Tru64)、Irix、FreeBSD、BSD/OS、SCO、AIX、OS390和QNX等。(
23、2)面向对象。Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。(3)丰富的API。Qt包括多达250个以上的C+类,还提供基于模板的collections、serialization、file、I/O device、directory management和date/time类。甚至还包括正则表达式的处理功能。(4)支持2D/3D图形渲染,支持OpenGL。(5)大量的开发文档。(6)XML支持。但是真正使得Qt在自由软件界的众多Widgets(如Lesstif、Gtk、EZWGL、Xforms及fltk等)中脱颖而出的还是基于Qt的重量级软件KDE。Qt虽然是商业公司的产品,但是走的却是开源路线,提供免费下载,全部都是开放源代码,非商业用途亦采用GPL的版权宣告,著名的Open SourceKDE项目便是采用Qt开发的。Trolltech也针对嵌入式环境推出了Qt/Embedded产品。与桌面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年工业地产有偿转让协议
- 2024年度南京二手房交易合同
- 2024年度水果交易合同模板
- 【初中生物】病毒教学课件2024-2025学年人教版生物七年级上册
- 2024年度法律服务委托合同
- 2024年度工程监理合同标的及服务内容具体描述
- 2024年工程劳务分包补充协议
- 2024个人向公司借款合同范本(简单版)
- 2024冷却塔填料生产工艺优化合同
- 2024年度CFG桩基工程水土保持合同
- 乡镇医院网络安全应急预案
- 运维知识库管理制度(模板)
- 2023年新华社招聘122人笔试参考题库(共500题)答案详解版
- 2023游戏行业人才报告
- 流行病学的误差和偏倚
- 2023年中级经济师考试真题及答案完整版
- 二年级上册道德与法治10《我们不乱扔》说课稿
- 2023-2024学年高一上学期选科指导主题班会 课件
- Unit4ExploringpoetryExtendedReading公开课课件高中英语牛津译林版(2020)选择性
- 天线技术在智能电网通信系统中的关键技术研究-第2篇
- 急诊科护士培训计划(6篇)
评论
0/150
提交评论