第3次课-Qt程序设计基础课件_第1页
第3次课-Qt程序设计基础课件_第2页
第3次课-Qt程序设计基础课件_第3页
第3次课-Qt程序设计基础课件_第4页
第3次课-Qt程序设计基础课件_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3次课Qt开发程序入门第3次课Qt开发程序入门1第一部分:

Qt基础程序设计基础第一部分: Qt基础程序设计基础2主要内容Qt介绍Qt安装基于QT的HelloWorld示例程序Qt中主要类的介绍Qt的信号槽机制Qt中主要控件介绍3主要内容Qt介绍33QT介绍Qt是Trolltech公司的标志性产品,是一个跨平台的C++图形用户界面(GUI)工具包Qt应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置Qt/Windows

(WindowsXP,2000,NT4,Me/98)Qt/Mac

(MacOSX)Qt/X11

(Linux,Solaris,HP-UX,IRIX,AIX等)Qt对不同平台的专门API进行了 专门的封装(文件处理,网络等)Trolltech公司由HaavardNord(执行总裁)和EirikChambe-Eng(总裁)于1994年在挪威创立的,2008年6月被NOKIA收购。通过直销,转售和战略合作伙伴等多种方式联合销售产品。Trolltech是一家拥有两个主线产品(Qt和Qtopia)的软件公司。Trolltech采取了成功的双重授权战略,为开发者提供商业和免费软件的授权使用。

拥有遍布全球60个国家的4400个客户,其中包括Adobe,IBM,Sharp,Siemens及其他全球知名公司。

QT介绍Qt是Trolltech公司的标志性产品,是一个跨4QT的历史1996Sep24Qt1.01996OctKDE组织成立1998Apr05Trolltech的程序员在5天之内将Netscape5.0从Motif移植到Qt上1998Apr08KDEFreeQt基金会成立1998Jul12KDE1.0发布1999Jun25Qt2.0发布2000Mar20嵌入式Qt发布2000Sep06Qt2.2发布2000Sep04Qtfreeedition开始使用GPL2004Aug4.02008Aug4.4发布,集成Webkit和PhononQT的历史1996Sep24Qt1.05QT的产品产品包括Qt、基于Framebuffer的QtEmbedded、快速开发工具QtDesigner、国际化工具QtLinguist等部分。Qt/Embedded是面向嵌入式系统的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C++GUI(图形用户界面)和基于Linux的嵌入式平台开发工具。Qt/EmbeddedAPI可以用于多种开发项目。许多基于Qt的XWindow程序可以非常方便地移植到嵌入式版本,适用于高端PDA等产品QT的产品产品包括Qt、基于Framebuffer的QtE6QT的产品Qtopia是为了Linux的PDA、智能电话和其他移动设备设计的一个全面并且可以用户化的应用程序平台和用户界面。它是第一个面向嵌入式Linux的全方位应用程序开发平台,它可以并且已经应用于众多的基于Linux的PDA(个人数字助理)设备和智能电话。

QT的产品Qtopia是为了Linux的PDA、智能电话和7Qt特征一面向对象Qt具有模块设计和注重软件构件或元素的可重用性的特点构件支持Qt提供信号signal和槽slot的概念,支持对象之间在彼此不知道对方的情况下合作,使得Qt适合构件编程友好的联机帮助Qt提供了大量的联机参考文件8Qt特征一面向对象88Qt特征二便利性Qt是跨平台的GUI工具包,对编程者隐藏了处理不同窗口系统时的潜在问题国际化Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言9Qt特征二便利性99Qt特征三丰富的API函数Qt为开发者提供了大量的函数可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观,Motif外观以及其他一些用户外观主题之间切换完整的组件工具Qt编程的基本模块叫做组件,Qt含有用来创建专业外观用户界面需要的所有组建10Qt特征三丰富的API函数1010MotifMotif最初是由OSF(开放基金协会)开发的一个工业标准的GUI(图形用户接口)。在开放系统(如Linux)上,可以使用免费的Motif。

Motif最先实现并运行于支持X窗口系统上,它是UNIX系统的主要用户接口。目前已经应用于超过200种硬件和软件平台。MotifGUIToolkit推动了异种机和网络环境下的应用开发,各种机器包括便携机、PC、工作站、超级计算机都得益于Motif环境下的应用程序一致的行为和视感。用MotifGUI开发的应用软件具有高度的可移植性、可交互性、以及可伸缩性。

MotifMotif最初是由O11高性能的工具

对于库来讲,它的有效性远超过应用性。为了提高Qt库的有效性、快捷性,对其进行了优化,Qt能执行一些基本的任务,比如图形的润色,比一般的基于平台的代码要快。Qt是基于Xlib,而不依赖Motif工具包。优越的绘画功能

Qt的绘画工具QPainter类,在任意一个绘图设备上都可以润色图形。绘图设备包括组件、像素映射、图形文件和打印机,相同的代码可以用在4种不同类型的设备上。QPainter类支持复杂的同等系统的转换,很容易在所有平台上画旋转文本和像素映射。Xwindows的底层库高性能的工具Xwindows的底层库12绘制2D/3D图形功能Qt提供了QGLWidget类,使用该类能够绘制2D/3D图形。用QGLWidget就像用一个Qt组件一样方便。绘制2D/3D图形功能13Qt系统构造库描述QtCore核心非GUI功能QtGui核心GUI功能QtNetwork网络模块QtOpenGLOpenGL模块QtSqlSQL模块QtSvgSVG透视图类QtXmlXML模块Qt3Support支持Qt3的类QAxContainerActiveQt客户端的扩充QAxServerActiveQt服务器段的扩充QtAssistantQt助手的语言类QtDesignerQt设计器的扩展类QtUiTools生成动态GUI类QtTest单元测试工具类Qt系统构造库描述QtCore核心非GUI功能QtGui核心14第3次课-Qt程序设计基础课件15Qt的安装Qt下载/downloads16Qt的安装Qt下载http://qt.nokia.co16Qt安装下载安装文件Qt_SDK_Lin32_offline_v1_1_beta_en.run,在linux上安装步骤如下:1.添加执行权限chmodu+xQt_SDK_Lin32_offline_v1_1_beta_en.run2.运行安装文件./Qt_SDK_Lin32_offline_v1_1_beta_en.run3.添加环境变量将Qt安装目录下的bin目录加入到环境变量PATH中17Qt安装下载安装文件Qt_SDK_Lin32_offline17Qt中主要的类介绍QObject QObject类是所有能够处理signal,slot和事件的Qt对象的基类,原型如下:QObject::QObject(Qobject*parent=0,constchar*name=0) 在上面的函数中,如果parent为0则构造一个无父的对象;如果对象是一个组件,则它会成为顶层窗口。18Qt中主要的类介绍QObject1818Qt中主要的类介绍2.QApplicationQApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件处理应用程序的开始,结束以及会话管理QApplication是QObject类的子类19在main.cpp中定义如下: intmain(intargc,char**argv){ QApplicationapp(argc,argv); …… returnapp.exec();}

Qt中主要的类介绍2.QApplication19在mai19QApplication包含在main()函数的事件循环体中,对所有来自Window系统和其它源文件的事件进行处理和调度,还包括处理应用程序的初始化和结束,并且提供会话管理。在Qt应用程序中,不管有多少个窗口,QApplication对象只能有一个,而且必须在其他对象之前创建。QApplication类中封装了很多函数,其中包括:

系统设置:setFont()来设置字体事件处理:sendEvent()用来发送事件GUI风格:setStyles()设置图形用户界面的风格颜色使用:colorSpec()用来返回颜色文件文本处理:translate()用来处理文本信息创建组件:setmainWidget()用来设置窗口的主组件QApplication包含在main()函数的事20函数分组系统设置desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInterval()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、setFont()、fontMetrics()。事件处理exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()。sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilter()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。图形用户界面风格

style()、setStyle()、polish()。颜色使用colorSpec()、setColorSpec()、qwsSetCustomColors()。文本处理setDefaultCodec()、installTranslator()、removeTranslator()、translate()。窗口部件mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow()、widgetAt()。高级光标处理hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。X窗口系统同步flushX()、syncX()。对话管理isSessionRestored()、sessionId()、commitData()、saveState()。线程lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。杂项closeAllWindows()、startingUp()、closingDown()、type()。函数分组系统设置desktopSettingsAware21Qt中主要的类介绍3.Qwidget(窗体)Qt拥有丰富的满足不同需求的窗体(按钮,滚动条等等),Qt的窗体使用起来很灵活,为了满足特别的要求,它很容易就可以被子类化。窗体是Qwidget类或它子类的实例,客户自己的窗体类需要从Qwidget它的子类继承。QWidget是所有用户接口对象的基类,继承了QObject类的属性,是QObject类的子类22Qt中主要的类介绍3.Qwidget(窗体)2222一个窗体可以包含任意数量的子窗体,子窗体可以显示在父窗体的客户区,一个没父窗体的窗体我们称之为顶级窗体(一个“窗口”),一个窗体通常有一个边框和标题栏作为装饰。Qt并未对一个窗体有什么限制,任何类型的窗体可以是顶级窗体,任何类型的窗体可以是别的窗体的子窗体。在父窗体显示区域的子窗体的位置可以通过布局管理自动的进行设置,也可以人为的指定。当父窗体无效,隐藏或被删除后,它的子窗体都会进行同样的动作。一个窗体可以包含任意数量的子窗体,子23上下文函数窗口函数show()、hide()、raise()、lower()、close()。顶级窗口caption()、setCaption()、icon()、setIcon()、iconText()、setIconText()、isActiveWindow()、setActiveWindow()、showMinimized()、showMaximized()、showFullScreen()、showNormal()。窗口内容update()、repaint()、erase()、scroll()、updateMask()。几何形状pos()、size()、rect()、x()、y()、width()、height()、sizePolicy()、setSizePolicy()、sizeHint()、updateGeometry()、layout()、move()、resize()、setGeometry()、frameGeometry()、geometry()、childrenRect()、adjustSize()、mapFromGlobal()、mapFromParent()、mapToGlobal()、mapToParent()、maximumSize()、minimumSize()、sizeIncrement()、setMaximumSize()、setMinimumSize()、setSizeIncrement()、setBaseSize()、setFixedSize()。模式isVisible()、isVisibleTo()、visibleRect()、isMinimized()、isDesktop()、isEnabled()、isEnabledTo()、isModal()、isPopup()、isTopLevel()、setEnabled()、hasMouseTracking()、setMouseTracking()、isUpdatesEnabled()、setUpdatesEnabled()。观感style()、setStyle()、cursor()、setCursor()、font()、setFont()、palette()、setPalette()、backgroundMode()、setBackgroundMode()、colorGroup()、fontMetrics()、fontInfo()。键盘焦点函数isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTabOrder()、setFocusProxy()。鼠标和键盘捕获grabMouse()、releaseMouse()、grabKeyboard()、releaseKeyboard()、mouseGrabber()、keyboardGrabber()。事件处理器event()、mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、keyPressEvent()、keyReleaseEvent()、focusInEvent()、focusOutEvent()、wheelEvent()、enterEvent()、leaveEvent()、paintEvent()、moveEvent()、resizeEvent()、closeEvent()、dragEnterEvent()、dragMoveEvent()、dragLeaveEvent()、dropEvent()、childEvent()、showEvent()、hideEvent()、customEvent()。变化处理器enabledChange()、fontChange()、paletteChange()、styleChange()、windowActivationChange()。系统函数parentWidget()、topLevelWidget()、reparent()、polish()、winId()、find()、metric()。这是什么的帮助customWhatsThis()。内部核心函数focusNextPrevChild()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFlags()。上下文函数窗口函数show()、hide()、rais24主要的类描述抽象窗口部件类抽象窗口部件类是通过子类来使用的。高级窗口部件类高级的GUI窗口部件,比如列表视图和进度条基本窗口部件类基本的GUI窗口部件,比如按钮、组合框和滚动条数据库类与数据库相关的类,比如与SQL数据库相关的类。日期与时间类处理日期与时间的类拖放类处理拖放和MIME类型的编码和解码类环境类提供了多样全面的服务,比如事件处理、系统设置访问和国际化等服务的类事件类用来生成和处理事件的类非GUI类非GUI类是一个集合类。比如:列表、队列、堆栈和字符串,它们不需要QApplication类就可以和其他类一起使用。多媒体、图形和打印类该类主要提供支持图形(2D、3D和OpenGL),图像的编码、解码和处理,声音,动画,打印等等。帮助系统类用来给应用程序提供在线帮助的类。布局管理类用来处理自动调整窗口部件的大小和位置,能够构成复杂对话框的类。共享类为了快速复制而使用引用计数的类。Qt系统的类Qt-C++图形用户界面库主要的类描述抽象窗口部件类抽象窗口部件类是通过子类来使用的。25Qt系统的类Qt-C++图形用户界面库主要的类描述输入/输出和网络类提供文件输入输出,目录和网络操作。主窗口和相关类一切你所需要的典型现代主程序窗口,包括目录、工具条、工作区等等。杂类各种各样其他有用的类模块/视图类该类主要用于设计模块/视图平台的类。对象模型Qt图形用户界面的工具包底层对象模型。组织者用户接口组织者,比如:分隔器、TAB条、按钮组等等。插件类插件相关类。标准对话框用于文件、字体、颜色选择和更多的已经做好的对话框。模板类Qt的模板库容器类。文本相关类文本处理的类。(也可以参考XML类。)线程类提供线程支持的类。窗口外观和风格可以自定义风格、字体、颜色等等外观的类。XML类支持XML的类,例如:DOM和SAX。QtopiaCore类是QtopiaCore一个特殊的类(Qt的嵌入Linux)。Qt系统的类Qt-C++图形用户界面库主要的类描述输入/输26信号和槽信号和槽机制是Qt的一个主要特征,是Qt与其它工具包最不相同的部分。在图形用户界面编程中,经常会出现窗口的一个部件发生的变化会被通知给另一个部件。Qt采用信号和槽实现对象部件之间的通信.27信号和槽信号和槽机制是Qt的一个主要特征,是Qt与其它工具包27Signal和Slot的声明(一)

在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何在一个类中定义signal和slot:classStudent:publicQObject{Q_OBJECTpublic:Student(){myMark=0;}intmark()const{returnmyMark;}publicslots:voidsetMark(intnewMark);signals:voidmarkChanged(intnewMark);private:intmyMark;};Signal和Slot的声明(一) 在Qt程序设计中,凡是28Signal和Slot的声明(二) signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signalvoidStudent::setMark(intnewMark){if(newMark!=myMark){myMark=newMark;

emitmarkChanged(myMark);}}Signal和Slot的声明(二) signal的发出一般29Signal和Slot的连接(一) 在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal 函数原形如下:boolconnect(constQObject*sender,constchar*signal,constQObject*receiver,constchar*slot) 其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件

Signal和Slot的连接(一) 在signal和slo30Signal和Slot的连接(二) 在使用connect()函数进行来接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下:

QLabel*label=newQLabel; QScrollBar*scroll=newQScrollBar; QObject::connect(scroll,SIGNAL(valueChanged(int)), label,SLOT(setNum(int)));

Signal和Slot的连接(二) 在使用connect(31Signal和Slot的连接方式(一)Signal和Slot的连接方式(一)32Signal和Slot的连接方式(二)同一个信号连接多个插槽connect(slider,SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));connect(slider,SIGNAL(valueChanged(int)),this, SLOT(updateStatusBarIndicator(int)));多个信号连接到同一个插槽connect(lcd,SIGNAL(overflow()),this, SLOT(handleMathError()));connect(calculator,SIGNAL(divisionByZero()),this, SLOT(handleMathError()));Signal和Slot的连接方式(二)同一个信号连接多个插槽33Signal和Slot的连接方式(三)一个信号连接到另一个信号connect(lineEdit,SIGNAL(textChanged(constQString&)), this,SIGNAL(updateRecord(constQString&)));取消一个连接disconnect(lcd,SIGNAL(overflow()),this, SLOT(handleMathError()));取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接Signal和Slot的连接方式(三)一个信号连接到另一个信34退出事件程序退出事件程序,只需要在程序结束时返回一个exec(),例如: returnapp.exec();其中a为QApplication的实例,当调用exec()将进入主事件的循环中,直到exit()被调用或主窗口部件被销毁退出事件程序退出事件程序,只需要在程序结束时返回一个exec35HelloWorld程序实例创建目录mkdir/examples/hello创建源文件touchhello.cpp编写源文件vihello.cpp36#include<Qapplication>/*所有QT图形话应用程序都必须包含此文件,它包含了QT应用程序的各种资源、基本设置、控制流、及事件处理等,如果是QT的非图形话,就包括<QCoreApplication>#include<QLabel>

/头文件也可以这样写<qlabel.h>intmain(intargc,char*argv[]){QApplicationapp(argc,argv);QLabel*label=newQLabel("HelloQt!");label->show();returnapp.exec();}HelloWorld程序实例创建目录mkdir/exa36HelloWorld程序实例切换到hello目录cd/examples/hello创建平台独立的工程文件projectfileqmake–project创建平台独立的Makefile文件qmake//或者直接qmake编译工程make运行程序./hello37HelloWorld程序实例切换到hello目录cd37HELLOQT(1)

#include<QApplication>#include<QLabel>intmain(intargc,char*argv[]){

QApplicationapp(argc,argv);

QLabel*label=newQLabel("HelloQt!");

label->show();

returnapp.exec();}HELLOQT(1)

#include<QApplica38HELLOQT(2):用HTML格式化

intmain(intargc,char*argv[]){

QApplicationapp(argc,argv);

QLabel*label=newQLabel("<h2><i>Hello</i>"

"<fontcolor=red>Qt!</font></h2>");

label->show();

returnapp.exec();}HELLOQT(2):用HTML格式化

39创建链接:一单击标签,就退出整个系统。

intmain(intargc,char*argv[]){

QApplicationapp(argc,argv);

QPushButton*button=newQPushButton("Quit");

QObject::connect(button,SIGNAL(clicked()),

&app,SLOT(quit()));

button->show();

returnapp.exec();}#include<QApplication>#include<QPushButton>创建链接:一单击标签,就退出整个系统。

intmain(i40基本布局(1):可以询问用户的年龄,微调框(spinbox)与滑块(slider)中的任何一个控件发生变化,另外一个控件都会做出相应的变化。

intmain(intargc,char*argv[]){

QApplicationapp(argc,argv);

QSpinBox*spinBox=newQSpinBox;

QSlider*slider=newQSlider(Qt::Horizontal);

/*水平滑块

spinBox->setRange(0,130);

/*限制年龄不会超过130岁slider->setRange(0,130);

QObject::connect(spinBox,SIGNAL(valueChanged(int)),

slider,SLOT(setValue(int)));

QObject::connect(slider,SIGNAL(valueChanged(int)),

spinBox,SLOT(setValue(int)));

/*两个控件值的变化都会引起另外一个控件的值做相应变化

spinBox->setValue(35);

/*初始值为35#include<QApplication>#include<QHBoxLayout>#include<QSlider>#include<QSpinBox>基本布局(1):可以询问用户的年龄,微调框(spinbox41基本布局(2)

QHBoxLayout*layout=newQHBoxLayout;

layout->addWidget(spinBox);

layout->addWidget(slider);

QWidget*window=newQWidget;

window->setWindowTitle("EnterYourAge");

window->setLayout(layout);

window->show();

returnapp.exec();}

QHBoxLayout水平布局管理器基本布局(2)

QHBoxLayout水平布局管理器42

QHBoxLayout水平布局管理器

创建一个窗体并排摆放一个按钮一个标签,使他们能够随着窗体的水平缩放而缩放实现这个功能需要使用布局管理器中的QHBoxLay进行布局,把这连个组件放入QHBoxlayout中。QHBoxLayout水平布局管理器

43QHBoxLayout水平布局管理器#include<QApplication>

#include<QLabel>

#include<QPushButton>

#include<QHBoxLayout>

#include<QWidget>intmain(intargc,char*argv[])

{

QApplicationapp(argc,argv);

QHBoxLayout*hlayout=newQHBoxLayout();

QPushButton*button=newQPushButton("imok");

QLabel*label=newQLabel("HelloQt!");

QWidget*window=newQWidget;

window->setWindowTitle("main");

hlayout->addWidget(button);

hlayout->addWidget(label);

window->setLayout(hlayout);

window->show();

returnapp.exec();

}QHBoxLayout水平布局管理器#inclu44一个完整的Qt程序1#include<qapplication.h>2#include<qlabel.h>3intmain(intargc,char**argv)4{5QApplicationapp(argc,argv);6QLabel*hello=newQLabel("HelloQt/Embedded!",0);7app.setMainWidget(hello);8hello->show();9returnapp.exec();10}一个完整的Qt程序45第二部分:QtDesigner第二部分:QtDesigner46QtDesigner Qt应用程序除了使用手工编写代码的方式外,还可以用过QtDesinger来完成,QtDesigner的功能十分强大,界面类似于我们常用的VB,而且还提供了大量可供编程使用的组件QtDesigner Qt应用程序除了使用手工编写代码的47第3次课-Qt程序设计基础课件48基于QtDesigner程序设计(一) 在使用QtDesigner程序开发时,一般要涉及到下面几个步骤: 1.创建和初始化子部件 2.设置子部件布局 3.设置Tab键次序(不是必须) 4.建立信号与插槽的连接 基于QtDesigner程序设计(一) 在使用QtDe49基于QtDesigner程序设计(二)1.创建并布置部件2.对部件使用布局管理3.建立信号与插槽的连接基于QtDesigner程序设计(二)1.创建并布置部件250基于QtDesigner程序设计(三)编辑两个部件之间信号与插槽之间的连接方式基于QtDesigner程序设计(三)编辑两个51基于QtDesigner程序设计(四) QtDesigner下不同风格的预览基于QtDesigner程序设计(四) QtDesign52QtDesigner的工作过程QtDesigner将工程文件组织成.ui的文件由.ui文件生成.cpp和.h文件.ui-----xmluic生成moc_filenaem.cppmocQtDesigner的工作过程QtDesigner将工程53QtDesigner功能框图QtDesigner功能框图54子类继承方式(Qt2.X)子类继承方式(Qt2.X)55第三部分:Qt开发环境的建立第三部分:Qt开发环境的建立56安装上MeeGo系统后,按照步骤,使用qmake工具进行编译。

如果遇到

make:g++:Commandnotfound

make:***[main.o]Error127

问题解决:

sudoapt-getinstallbuild-essential

这个就是GCC的开发环境了,比较方便

安装上MeeGo系统后,按照步骤,使用qmake工具进57第四部分:Qt程序开发流程第四部分:Qt程序开发流程58一个完整的Qt程序开发过程(一)以使用QtDesigner为例:首先新建一个文件夹hello。下面的操作都需要转到文件夹下里去。文件夹应该包含.ui与.main.cpp文件。1.通过designer设计并保存工程为.ui文件2.使用uic命令生成.h头文件$uic–oname1.hname.ui生成一个name1.h头文件3.手工编写一个main.cpp文件

一个完整的Qt程序开发过程(一)以使用QtDesigner59main.cpp里面把这个头文件包含进去。#include<QApplication>#include"name1.h"intmain(intargc,char*argv[]){QApplicationapp(argc,argv);

QDialogdlg;Ui_Dialogui;ui.setupUi(&dlg);dlg.show();returnapp.exec();}里面红线的为固定格式main.cpp里面把这个头文件包含进去。里面红线的为固定格60一个完整的Qt程序开发过程(二) 3.使用qmake工具生成.pro工程文件 $qmake-project4.qmake生成Makefile文件$qmake5.make生成可执行文件$make6.执行文件一个完整的Qt程序开发过程(二) 3.使用qmake工具生成61如果在windows环境下,命令稍微有点区别:qmake–project生成工程文件qmake生成Makefile文件mingw32-make

编译生成目标代码cddebug看可执行文件hello执行如果在windows环境下,命令稍微有点区别:qmake–62第3次课Qt开发程序入门第3次课Qt开发程序入门63第一部分:

Qt基础程序设计基础第一部分: Qt基础程序设计基础64主要内容Qt介绍Qt安装基于QT的HelloWorld示例程序Qt中主要类的介绍Qt的信号槽机制Qt中主要控件介绍65主要内容Qt介绍365QT介绍Qt是Trolltech公司的标志性产品,是一个跨平台的C++图形用户界面(GUI)工具包Qt应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置Qt/Windows

(WindowsXP,2000,NT4,Me/98)Qt/Mac

(MacOSX)Qt/X11

(Linux,Solaris,HP-UX,IRIX,AIX等)Qt对不同平台的专门API进行了 专门的封装(文件处理,网络等)Trolltech公司由HaavardNord(执行总裁)和EirikChambe-Eng(总裁)于1994年在挪威创立的,2008年6月被NOKIA收购。通过直销,转售和战略合作伙伴等多种方式联合销售产品。Trolltech是一家拥有两个主线产品(Qt和Qtopia)的软件公司。Trolltech采取了成功的双重授权战略,为开发者提供商业和免费软件的授权使用。

拥有遍布全球60个国家的4400个客户,其中包括Adobe,IBM,Sharp,Siemens及其他全球知名公司。

QT介绍Qt是Trolltech公司的标志性产品,是一个跨66QT的历史1996Sep24Qt1.01996OctKDE组织成立1998Apr05Trolltech的程序员在5天之内将Netscape5.0从Motif移植到Qt上1998Apr08KDEFreeQt基金会成立1998Jul12KDE1.0发布1999Jun25Qt2.0发布2000Mar20嵌入式Qt发布2000Sep06Qt2.2发布2000Sep04Qtfreeedition开始使用GPL2004Aug4.02008Aug4.4发布,集成Webkit和PhononQT的历史1996Sep24Qt1.067QT的产品产品包括Qt、基于Framebuffer的QtEmbedded、快速开发工具QtDesigner、国际化工具QtLinguist等部分。Qt/Embedded是面向嵌入式系统的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C++GUI(图形用户界面)和基于Linux的嵌入式平台开发工具。Qt/EmbeddedAPI可以用于多种开发项目。许多基于Qt的XWindow程序可以非常方便地移植到嵌入式版本,适用于高端PDA等产品QT的产品产品包括Qt、基于Framebuffer的QtE68QT的产品Qtopia是为了Linux的PDA、智能电话和其他移动设备设计的一个全面并且可以用户化的应用程序平台和用户界面。它是第一个面向嵌入式Linux的全方位应用程序开发平台,它可以并且已经应用于众多的基于Linux的PDA(个人数字助理)设备和智能电话。

QT的产品Qtopia是为了Linux的PDA、智能电话和69Qt特征一面向对象Qt具有模块设计和注重软件构件或元素的可重用性的特点构件支持Qt提供信号signal和槽slot的概念,支持对象之间在彼此不知道对方的情况下合作,使得Qt适合构件编程友好的联机帮助Qt提供了大量的联机参考文件70Qt特征一面向对象870Qt特征二便利性Qt是跨平台的GUI工具包,对编程者隐藏了处理不同窗口系统时的潜在问题国际化Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言71Qt特征二便利性971Qt特征三丰富的API函数Qt为开发者提供了大量的函数可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观,Motif外观以及其他一些用户外观主题之间切换完整的组件工具Qt编程的基本模块叫做组件,Qt含有用来创建专业外观用户界面需要的所有组建72Qt特征三丰富的API函数1072MotifMotif最初是由OSF(开放基金协会)开发的一个工业标准的GUI(图形用户接口)。在开放系统(如Linux)上,可以使用免费的Motif。

Motif最先实现并运行于支持X窗口系统上,它是UNIX系统的主要用户接口。目前已经应用于超过200种硬件和软件平台。MotifGUIToolkit推动了异种机和网络环境下的应用开发,各种机器包括便携机、PC、工作站、超级计算机都得益于Motif环境下的应用程序一致的行为和视感。用MotifGUI开发的应用软件具有高度的可移植性、可交互性、以及可伸缩性。

MotifMotif最初是由O73高性能的工具

对于库来讲,它的有效性远超过应用性。为了提高Qt库的有效性、快捷性,对其进行了优化,Qt能执行一些基本的任务,比如图形的润色,比一般的基于平台的代码要快。Qt是基于Xlib,而不依赖Motif工具包。优越的绘画功能

Qt的绘画工具QPainter类,在任意一个绘图设备上都可以润色图形。绘图设备包括组件、像素映射、图形文件和打印机,相同的代码可以用在4种不同类型的设备上。QPainter类支持复杂的同等系统的转换,很容易在所有平台上画旋转文本和像素映射。Xwindows的底层库高性能的工具Xwindows的底层库74绘制2D/3D图形功能Qt提供了QGLWidget类,使用该类能够绘制2D/3D图形。用QGLWidget就像用一个Qt组件一样方便。绘制2D/3D图形功能75Qt系统构造库描述QtCore核心非GUI功能QtGui核心GUI功能QtNetwork网络模块QtOpenGLOpenGL模块QtSqlSQL模块QtSvgSVG透视图类QtXmlXML模块Qt3Support支持Qt3的类QAxContainerActiveQt客户端的扩充QAxServerActiveQt服务器段的扩充QtAssistantQt助手的语言类QtDesignerQt设计器的扩展类QtUiTools生成动态GUI类QtTest单元测试工具类Qt系统构造库描述QtCore核心非GUI功能QtGui核心76第3次课-Qt程序设计基础课件77Qt的安装Qt下载/downloads78Qt的安装Qt下载http://qt.nokia.co78Qt安装下载安装文件Qt_SDK_Lin32_offline_v1_1_beta_en.run,在linux上安装步骤如下:1.添加执行权限chmodu+xQt_SDK_Lin32_offline_v1_1_beta_en.run2.运行安装文件./Qt_SDK_Lin32_offline_v1_1_beta_en.run3.添加环境变量将Qt安装目录下的bin目录加入到环境变量PATH中79Qt安装下载安装文件Qt_SDK_Lin32_offline79Qt中主要的类介绍QObject QObject类是所有能够处理signal,slot和事件的Qt对象的基类,原型如下:QObject::QObject(Qobject*parent=0,constchar*name=0) 在上面的函数中,如果parent为0则构造一个无父的对象;如果对象是一个组件,则它会成为顶层窗口。80Qt中主要的类介绍QObject1880Qt中主要的类介绍2.QApplicationQApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件处理应用程序的开始,结束以及会话管理QApplication是QObject类的子类81在main.cpp中定义如下: intmain(intargc,char**argv){ QApplicationapp(argc,argv); …… returnapp.exec();}

Qt中主要的类介绍2.QApplication19在mai81QApplication包含在main()函数的事件循环体中,对所有来自Window系统和其它源文件的事件进行处理和调度,还包括处理应用程序的初始化和结束,并且提供会话管理。在Qt应用程序中,不管有多少个窗口,QApplication对象只能有一个,而且必须在其他对象之前创建。QApplication类中封装了很多函数,其中包括:

系统设置:setFont()来设置字体事件处理:sendEvent()用来发送事件GUI风格:setStyles()设置图形用户界面的风格颜色使用:colorSpec()用来返回颜色文件文本处理:translate()用来处理文本信息创建组件:setmainWidget()用来设置窗口的主组件QApplication包含在main()函数的事82函数分组系统设置desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInterval()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、setFont()、fontMetrics()。事件处理exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()。sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilter()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。图形用户界面风格

style()、setStyle()、polish()。颜色使用colorSpec()、setColorSpec()、qwsSetCustomColors()。文本处理setDefaultCodec()、installTranslator()、removeTranslator()、translate()。窗口部件mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow()、widgetAt()。高级光标处理hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。X窗口系统同步flushX()、syncX()。对话管理isSessionRestored()、sessionId()、commitData()、saveState()。线程lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。杂项closeAllWindows()、startingUp()、closingDown()、type()。函数分组系统设置desktopSettingsAware83Qt中主要的类介绍3.Qwidget(窗体)Qt拥有丰富的满足不同需求的窗体(按钮,滚动条等等),Qt的窗体使用起来很灵活,为了满足特别的要求,它很容易就可以被子类化。窗体是Qwidget类或它子类的实例,客户自己的窗体类需要从Qwidget它的子类继承。QWidget是所有用户接口对象的基类,继承了QObject类的属性,是QObject类的子类84Qt中主要的类介绍3.Qwidget(窗体)2284一个窗体可以包含任意数量的子窗体,子窗体可以显示在父窗体的客户区,一个没父窗体的窗体我们称之为顶级窗体(一个“窗口”),一个窗体通常有一个边框和标题栏作为装饰。Qt并未对一个窗体有什么限制,任何类型的窗体可以是顶级窗体,任何类型的窗体可以是别的窗体的子窗体。在父窗体显示区域的子窗体的位置可以通过布局管理自动的进行设置,也可以人为的指定。当父窗体无效,隐藏或被删除后,它的子窗体都会进行同样的动作。一个窗体可以包含任意数量的子窗体,子85上下文函数窗口函数show()、hide()、raise()、lower()、close()。顶级窗口caption()、setCaption()、icon()、setIcon()、iconText()、setIconText()、isActiveWindow()、setActiveWindow()、showMinimized()、showMaximized()、showFullScreen()、showNormal()。窗口内容update()、repaint()、erase()、scroll()、updateMask()。几何形状pos()、size()、rect()、x()、y()、width()、height()、sizePolicy()、setSizePolicy()、sizeHint()、updateGeometry()、layout()、move()、resize()、setGeometry()、frameGeometry()、geometry()、childrenRect()、adjustSize()、mapFromGlobal()、mapFromParent()、mapToGlobal()、mapToParent()、maximumSize()、minimumSize()、sizeIncrement()、setMaximumSize()、setMinimumSize()、setSizeIncrement()、setBaseSize()、setFixedSize()。模式isVisible()、isVisibleTo()、visibleRect()、isMinimized()、isDesktop()、isEnabled()、isEnabledTo()、isModal()、isPopup()、isTopLevel()、setEnabled()、hasMouseTracking()、setMouseTracking()、isUpdatesEnabled()、setUpdatesEnabled()。观感style()、setStyle()、cursor()、setCursor()、font()、setFont()、palette()、setPalette()、backgroundMode()、setBackgroundMode()、colorGroup()、fontMetrics()、fontInfo()。键盘焦点函数isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTabOrder()、setFocusProxy()。鼠标和键盘捕获grabMouse()、releaseMouse()、grabKeyboard()、releaseKeyboard()、mouseGrabber()、keyboardGrabber()。事件处理器event()、mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、keyPressEvent()、keyReleaseEvent()、focusInEvent()、focusOutEvent()、wheelEvent()、enterEvent()、leaveEvent()、paintEvent()、moveEvent()、resizeEvent()、closeEvent()、dragEnterEvent()、dragMoveEvent()、dragLeaveEvent()、dropEvent()、childEvent()、showEvent()、hideEvent()、customEvent()。变化处理器enabledChange()、fontChange()、paletteChange()、styleChange()、windowActivationChange()。系统函数parentWidget()、topLevelWidget()、reparent()、polish()、winId()、find()、metric()。这是什么的帮助customWhatsThis()。内部核心函数focusNextPrevChild()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFlags()。上下文函数窗口函数show()、hide()、rais86主要的类描述抽象窗口部件类抽象窗口部件类是通过子类来使用的。高级窗口部件类高级的GUI窗口部件,比如列表视图和进度条基本窗口部件类基本的GUI窗口部件,比如按钮、组合框和滚动条数据库类与数据库相关的类,比如与SQL数据库相关的类。日期与时间类处理日期与时间的类拖放类处理拖放和MIME类型的编码和解码类环境类提供了多样全面的服务,比如事件处理、系统设置访问和国际化等服务的类事件类用来生成和处理事件的类非GUI类非GUI类是一个集合类。比如:列表、队列、堆栈和字符串,它们不需要QApplication类就可以和其他类一起使用。多媒体、图形和打印类该类主要提供支持图形(2D、3D和OpenGL),图像的编码、解码和处理,声音,动画,打印等等。帮助系统类用来给应用程序提供在线帮助的类。布局管理类用来处理自动调整窗口部件的大小和位置,能够构成复杂对话框的类。共享类为了快速复制而使用引用计数的类。Qt系统的类Qt-C++图形用户界面库主要的类描述抽象窗口部件类抽象窗口部件类是通过子类来使用的。87Qt系统的类Qt-C++图形用户界面库主要的类描述输入/输出和网络类提供文件输入输出,目录和网络操作。主窗口和相关类一切你所需要的典型现代主程序窗口,包括目录、工具条、工作区等等。杂类各种各样其他有用的类模块/视图类该类主要用于设计模块/视图平台的类。对象模型Qt图形用户界面的工具包底层对象模型。组织者用户接口组织者,比如:分隔器、TAB条、按钮组等等。插件类插件相关类。标准对话框用于文件、字体、颜色选择和更多的已经做好的对话框。模板类Qt的模板库容器类。文本相关类文本处理的类。(也可以参考XML类。)线程类提供线程支持的类。窗口外观和风格可以自定义风格、字体、颜色等等外观的类。XML类支持XML的类,例如:DOM和SAX。QtopiaCore类是QtopiaCore一个特殊的类(Qt的嵌入Linux)。Qt系统的类Qt-C++图形用户界面库主要的类描述输入/输88信号和槽信号和槽机制是Qt的一个主要特征,是Qt与其它工具包最不相同的部分。在图形用户界面编程中,经常会出现窗口的一个部件发生的变化会被通知给另一个部件。Qt采用信号和槽实现对象部件之间的通信.89信号和槽信号和槽机制是Qt的一个主要特征,是Qt与其它工具包89Signal和Slot的声明(一)

在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何在一个类中定义signal和slot:classStudent:publicQObject{Q_OBJECTpublic:Student(){myMark=0;}intmark()const{returnmyMark;}publicslots:voidsetMark(intnewMark);signals:voidmarkChanged(intnewMark);private:intmyMark;};Signal和Slot的声明(一) 在Qt程序设计中,凡是90Signal和Slot的声明(二) signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signalvoidStudent::setMark(intnewMark){if(newMark!=myMark)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论