QT-GUI程序设计.ppt
什么是QT?pQt 是一个用是一个用C+编写的跨平台开发编写的跨平台开发框架,它包括跨平台类库、集成开框架,它包括跨平台类库、集成开发工具和跨平台发工具和跨平台 IDE。l一次编码,只需重新编译,便可在不同桌面,不同平台上部署l速度快,不需要虚拟机l设计界面漂亮(有人认为比VISUAL C+强的多,而且简单)pQT用途l 嵌入式设备l 消费电子l 桌面系统pQT 支持的平台QT用途及支持平台面向对象pQt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。pQt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。 QT模块lQt由模块构建l所有的模块都有一个共同的方案,并由相同的API设计思路构建。QtCorePhononQtXmlPatternsQtXmlQtWebKitQtSvgQtSqlQtScriptQtOpenVGQtOpenGLQtNetworkQtMultimediaQtGuiQT常用模块QtCore,Qt4的基本模块的基本模块,定义了其他模块使用的定义了其他模块使用的Qt核心的非核心的非GUI类类,所所有其他的模块都依赖与该模块有其他的模块都依赖与该模块;QtGui,定义了图形用户界面类定义了图形用户界面类;QtNetwork,定义了定义了Qt的网络编程类的网络编程类;QtSql,定义了访问数据库的类;QtSvg,定义了显示和生成SVG(Scalable Vector Graphics)类;QtXml,定义了处理XML(eXtensible Markup Language)语言的类;QtDesigner,定义了扩展Qt设计器(QtDesigner)的类,该模块使得程序员能够为Qt设计器创建自定义的Qt窗口部件插件(widget plugins)和创建能够访问Qt设计器组件的类;QtUiTools,定义了在应用程序中直接处理ui(User Interface)文件的类,它使得应用程序能够在运行时使用ui文件构建用户界面;QtAssistant,为应用程序提供了加载Qt助手(Qt Assistant)以支持在线帮助(online help)的功能;Qt3Support,定义了同Qt4以前版本Qt3兼容的类,以使得Qt3的程序能够更容易地移植到Qt4;QtTest,定义了对Qt应用程序和库进行单元测试(unit testing)的类.QtScript,该模块提供了对脚本的支持.QT C+扩展pQt 对 C+ 的扩展主要是3个方面:l 元对象系统 Qt用宏(macros,如signal,slot)和内省(introspection)扩展了C+,包含Q_OBJECT宏的文件(.h, .cpp等),需要 moc 预处理l 资源系统 .qrc 文件 ,需要 rcc 进行预处理 l 界面系统 .ui 文件 ,需要 uic 进行预处理p所有的代码仍然是简明C + +QT目的l从一份代码构建的跨平台应用l简单地(重复)使用API,高开发效率,开放性,使用有趣l根据不同平台的本地观感生成相应的本地应用Windows mac OS Linux/X11商业与开源lLGPL 免费l你的应用程序可以是开源的或者是不开源的l对Qt的修改,必须反馈到社区lGPL 免费l你的应用程序必须是开源的l对Qt的修改,必须反馈到社区l商业的 收费l你的应用程序可以是不开源 的l对Qt的修改,可以不开源QT版本p 时间 win/x11l1996 1.0l1999 2.0l2001 3.0l2005 4.0l现在 4.8p QT 大版本之间不兼容,同一个大版本之间兼容,比如:3.0和4.0不兼容,4.6 和4.7之间是兼容的QT产品lQT/Embedded : Qt/Embedded是一个完整的自包含基于Linux 平台的GUI和嵌入式平台开发工具。包含了早期的版本Qtopia,面向手机、PDA等消费电子产品,不依赖于庞大的Xlib,直接在Linux帧缓冲基础上开发GUI.lQT 桌面版基于Windows、LinuxQT SDK 组成p自4.5版开始,Qt首次以SDK形式发布了Qt套件,并在单独的安装程序中包含了完整的Qt SDK,包括:uQtCreator-跨平台IDE Nokia全力打造QtCreator,将以前单独列出的QtDesigner、QtAssistant、QtLinguist全部整合到QtCreator中,作为QtCreator的一部分。QT SDK组成uQtLibrary 是一个拥有超过400C+类,同时不断扩展的库。它封装了用于端到端应用程序开发所需要的所有基础结构。优秀的Qt应用程序接口包括成熟的对象模型,内容丰富的集合类,图形有户界面编程与布局设计功能,数据库编程,网络,XML,国际化,OpenGL集成等。uQtDesigner 是一个功能强大的GUI布局与窗体构造器,能够在所有支持平台上,以本地化的视图外观与认知,快速开发高性能的用户界面。uQtAssistant 是一个完全可自定义,重新分配的帮助文件或文档浏览器,又称作Qt助手。QT SDK组成uQtLinguist 是一套用来消除国际化工作流程中所带来障碍的工具,又称作Qt语言家。uQT 开发工具 qmake -生成.pro文件makefile uic - UICompiler,将ui文件转化成C文件认识的.h文件 moc -是一个用来生成一些与信号和槽相关的底层代码的预编译工具 rcc -编译资源文件为二进制代码QT 安装uSDK获得 从 http:/ Linux/x86版本: qt-sdk-linux-x86-opensource-2010.04.bin l windows版本: qt-sdk-win-opensource-2010.04.exe QT安装pLinux下安装,建议安装到FC14以后版本l 用root用户登录到系统l 将安装文件上传到linux下l 修改文件属性,改成可执行属性 #chmod 777 qt-sdk-linux-x86-opensource-2010.04.bin #./qt-sdk-linux-x86-opensource-2010.04.binp出现图形画面后,点下一步,直到安装完成,一般会默认装在/opt/qtsdk-2010.04目录下,也可以在安装时制定目录QT安装pLinux下安装完成后修改环境变量在/etc/profile文件末尾加上下面四行: export QTDIR=/opt/qtsdk-2010.04/qtexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATHp以上改动注意:以上改动注意: 不论是不论是PATH还是库路径,全要放在原来值的前面,让还是库路径,全要放在原来值的前面,让系统第一个找到新安装的系统第一个找到新安装的QT可执行文件,和可执行文件,和QT库。库。 第一行是qt这个目录所在的路径,第二行是qmake及uic可执行程序的路径,第三行是一个库的路径,编辑完成后,保存,退出。p使环境变量立即生效,执行 #source /etc/profilep确定qt是否可用 #qmake v,看到qt版本信息,说明安装成功QT安装p Windows 下安装l 直接双击qt-sdk-win-opensource-2010.04.exe安装文件,点下一步,系统缺省安装在C:Qt2010.04目录下l 环境变量设置1)编辑Path 补上Qt的bin路径;C:Qt2010.04bin;C:Qt2010.04qtbin;C:Qt2010.04mingwbin即可,其中“X”对应安装Qt的硬盘盘符,我是安装在C盘下的。2) 新建环境变量,名称:QTDIR内容:C:Qt2010.04qt3) 新建环境变量,名称: QMAKESPEC 内容:C:Qt2010.04qtmkspecswin32-g+ QT Cteatorp QtCreator是全新的跨平台集成开发环境(IDE),专为Qt开发人员的需求量身定制。它包括:(1) 高度智能的代码编辑器支持代码高亮以及自动完成功能。 (2)Qt4工程向导(ProjectWizard)使用ProjectWizard,用户可以轻松创建基于控制台控制台的应用程序、GUI应用程序以及C+类库类库等多种类型的工程。 (3) 集成帮助功能在QtCreator中可以查阅相关的Qt文档和示例程序。 (4)集成QtDesigner功能。(5)模块间智能导航,来准确定位文件信息(6)使用qmake进行工程管理。(7)集成调试器 Qt Cteator 主界面pQtCreator的组成QtCreator主要由以下组件构成 菜单(MenuBar) 模式选择器(ModeSelectors) 项目浏览器(ProjectInspector) 代码编辑器(CodeEditor) 输出面板(OutputPane) 边栏(Sidebar) 快速导航面板(QuickOpenPane)pQT Creator的模式选择 欢迎模式(welcom mode) 编辑模式(edit mode) 设计模式(design mode) 调试模式(debug mode) 项目模式(projects),完成对项目属性的设置 帮助 模式(help mode)p QT Creator的输出模式1 l构建过程和结果(BuildIssues) 显示与构建相关的信息(如警告信息、错误信息等)。l搜索结果(SearchResults)子面板 提供了执行搜索动作后的结果输出显示,搜索的范围可 以是全局的,也可以是具体局部的。lApplication 应用程序输出的控制台,比如qdebug打印出来的调试信息。l Compile 编译输出子面板 显示编译的错误输出。QT 简单应用实例(1) p 打开Qt creator ,欢迎界面出现两个按钮Open projects、Create Project(1)选择Cteate Project(2)选择 Qt C+ Project - Qt Gui Applicationation(3)这里也可以创建其他)这里也可以创建其他类型的工程程序类型的工程程序QT 简单应用实例(2)p点Choose 选择工程所在的目录,同时输入工程的名称C:Qt2010.04qtprojects目录,工程名称为helloqtp点next,下一步QT 简单应用实例(3)p 注意这个地方输入Class Name 和Base Class 选择:p Base Class 可以是QMainWindow QWidget QDialog,即可以使主窗口类,控件类,及对话框类,这里我们选择QMainWindow(也可以选QDialog)p 点next,直到finish完成QT 简单应用实例(4)此时左面一列,处在Design 这个页面上;左面第二列是常用的可视化控件,中间是主窗口,我们可以把控件用鼠标拖动到主界面上。比如我们在主窗口中放一个标签,和一个按钮,如下:IDE最右面的上面是窗口各个部分的控件关系,比如,如果我们不需要菜单的话,我们可以用鼠标右键点击MenuBar,然后选择Remove MenuBarIDE 最右面的下面是当前选中控件关心标签的名称,和标签的TextObjectName LabelText : 输入我们自己的标签:第一个QT程序 Hello World !,可以将标签拉大点再在Buttons 里边拉一个按钮上去,将按钮的标签改成OK最后给两个控件设置垂直布局,按住Ctrl 选中两个控件,然后点击工具栏中的三个竖线的布局按钮Lay out Vertical ly ,布局完成.设置控件tab顺序,Edit-Edit tab order.第一个Helloworld程序做好了。选择File -save all 保存。QT 简单应用实例(6)p QT为我们生成了如下文件:Helloqt.pro: 工程文件Mainwindow.ui :控件布局文件,XML形式的文件,最终生成特殊的ui_mainwindow.h头文件Uic o ui_mainwindow.h mainwindow.uiMainwindow.h : 主窗口类声明的头文件Mainwindow.cpp 实现实现mainwindow.h中的主类中的主类Main.cpp : qt 程序的主程序Mainwindow.cpp :主窗口类的实现l所有的代码都在MainWindow.cpp里实现的。l如果想实现窗口里边的控件动作,需要定义信号和槽机制实现(signal - slot),信号和槽机制,是QT编程的主要机制。QT 简单应用实例(7)p Main.cpp#include #include mainwindow.hint main(int argc, char *argv) QApplication a(argc, argv); MainWindow w;/定义的主窗口类的一个实例, w.show(); / 把主窗口显示出来 return a.exec(); / 进入应用类的消息循环l Ui_mainwindows.h中定义中定义setupUI 方法,生成方法,生成Form中定义中定义的窗口控件的窗口控件pMainwindow.cpp#include mainwindow.h#include ui_mainwindow.hMainWindow:MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:MainWindow) ui-setupUi(this);MainWindow:MainWindow() delete ui;编译、运行p 编译:选择菜单Build-Build All 注意点击屏幕输出窗口里的compile output ,查看编译过程中是否有错误,注意看p 运行: 选择菜单Build -Run, 或者直接选择IDE最左面一列的下面Run 按钮;如果程序有输出,选则Application output 输出窗口。 给OK按钮增加一个点击事件的槽函数 p 在Design 画面中,鼠标右键点击OK按钮,出现菜单,然后选择go to slotl选中Clicked(),点击OK按钮,添加槽函数,lMainwindow.h 中添加函数体声明lMianwindow.cpp中增加了空函数体,其中我们添加对程序退出的调用close();void MainWindow:on_pushButton_clicked() this-close();QT跨平台移植p 将刚才的Helloqt 目录传到Linux下的某一个目录,比如说/root/qtproject目录# cd helloqt采用命令行模式编译如下:(1) 先生成Linux下的工程文件,那么原来的工程文件helloqt.pro会改名成helloqt.pro.user命令如下:# qmake project(2) 生成 Linux下的Makefile文件,用qmake 命令#qmake(3) 用Make 命令编译工程文件#make(4) 运行#./helloqtp 点击OK按钮,程序退出p 结论:只要重新编译,我们的代码就可以再Linux下运行,体现了QT的跨平台特性。QT程序设计一般方法 1)、创建并初始化子窗口部件。2)、将子窗口部件放置到布局当中。3)、对Tab的顺序进行设置。4)、放置信号和槽的连接。5)、完成槽的功能完成槽的功能。休息讨论时间QT核心运行机制 Meta-Object System(元对象系统) Signals and Slots(信号和槽) Qts Property System(QT属性系统)元对象系统p元对象系统是QT对C+的一种扩展,它提供了两个关键服务:信号/槽、运行时的类型信息和动态属性系统(内省机制)p元对象系统这样工作:l Q_OBJECT宏声明一些内省函数(metaObject(),TR(),qt_matacall()和少量其他的函数)。这些函数必须在所有的QObject的子类中被实现。l Qt的moc工具负责执行被Q_OBJECT宏声明的函数,同时负责执行所有的信号函数。l QObject的成员函数,例如connect()和disconnect(),使用内省函数来工作元对象系统组成三要素p QObject 类作为每一个需要利用元对象系统的类的基类,QObject 是大部分Qt 类的基类p Q_OBJECT 宏 定义在每一个类的私有数据段,用来启用元对象功能,比如,动态属性,信号和槽p 元对象编译器moc (the Meta Object Complier), moc 分析C源文件,如果它发现在一个头文件(header file)中包含Q_OBJECT 宏定义,然后动态的生成另外一个C+源文件,这个新的源文件包含 Q_OBJECT 的实现代码,这个新的 C+ 源文件也会被编译、链接到这个类的二进制代码中去,因为它也是这个类的完整的一部分。 元对象数据In addition to providing the signals and slots mechanism for communication between objects (the main reason for introducing the system), the meta-object code provides the following additional features:qobject.html#metaObject() returns the associated meta-object for the class.qmetaobject.html#className() returns the class name as a string at run-time, without requiring native run-time type information (RTTI) support through the C+ compiler.qobject.html#inherits() function returns whether an object is an instance of a class that inherits a specified class within the QObjectinheritance tree.qobject.html#tr() and QObject:trUtf8() translate strings for internationalization.qobject.html#setProperty() and QObject:property() dynamically set and get properties by name.qmetaobject.html#newInstance() constructs a new instance of the class.moc 特征提取过程class MyClass : public QObject Q_OBJECT Q_CLASSINFO(author, John Doe)public: MyClass(const Foo &foo, QObject *parent=0); Foo foo() const;public slots: void setFoo( const Foo &foo );signals: void fooChanged( Foo );private: Foo m_foo;Qt 关键字类的一般信息 Q_OBJECT宏, 通常是第一步首先确认该类继承自 Qobject (可能是间接)Moc编译过程l元数据通过元对象编译器(moc)在编译时组合在一起。lmoc从头文件里面获得数据。sources*.cppexecutablesobject files*.oheaders*.hgeneratedmoc_*.cppQt C+ 生成过程生成过程includescompileslinkscompilesmocs元对象系统实现p元对象系统实现 基于Qobject类生成子类 在子类中调用O_OBJECT宏 定义信号和槽处理函数p使用使用QObject作为基类而不使用作为基类而不使用Q_OBJECT宏宏和元对象代码是可以的,但是如果和元对象代码是可以的,但是如果Q_OBJECT宏没有被使用,那么这个类声明的信号和槽,宏没有被使用,那么这个类声明的信号和槽,以及其他特征描述都不会被调用。以及其他特征描述都不会被调用。 信号和槽(1)p信号和槽机制:是Qt自行定义的一种应用于对象之间通信的高级接口。当一个特定的事件发生时,一个或几个被指定的信号就被发射,槽则是响应信号的函数,如果存在一个或几个槽和该信号相连接,那在该信号被发射后,这些槽就会立刻被执行。l 信号和槽并不是标准C/C+语言的特性,它是Qt对C+特性的一种扩展。l 采用信号和槽机制编写的代码不能直接被标准C+编译器编译,而需要借助一个被称为moc(Meta Object Compiler)的Qt工具对信号和槽在编译之前进行预处理。 信号和槽(2)p 信号:一种用于对外通知对象自身状态改变的技术。l 在Qt中由关键字signals来声明,它的形式类似于一个函数,但是返回值只能是void类型,发射信号的关键字是emit。 l 信号只需要声明不需要实现且只能由本类及其子类发射l 信号不需要定义访问权限,其权限类似protected。p 槽:是一种可以用来连接到信号的成员函数,信号发射时,它所连接的相应的槽将被执行。槽也可以作为普通的成员函数来使用。l 当槽作为普通成员函数使用时,需要定义访问权限。l 当槽作为响应信号函数使用时,访问权限无效,其权限类似public。信号和槽(3)p 信号和槽的关系u 调用关系一个信号和一个槽进行单独连接。几个信号连接在同一个槽上。一个信号和多个槽连接。一个信号和另一个信号进行连接。u 参数传递:信号和槽通常可以带任意的参数。但要求:它们的参数类型和个数都是一样的如果信号携带的参数比槽的多,则多余的参数将会被忽略。信号和槽携带的参数不能是模版、函数指针,也不能有默认值等。p 编写通过滑块改变分数的例子Signal和Slot的声明(1/2)p 在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义 class Student : public QObject Q_OBJECT public: Student() myMark = 0; int mark() const return myMark; public slots: void setMark(int newMark); signals: void markChanged(int newMark); private: int myMark; ; Signal和Slot的声明(2/2)psignal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signal void Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markChanged(myMark); Signal和Slot的连接(1/2) p在signal和slot声明以后,需要使用connect()函数将它们连接起来。 bool QObject:connect ( const QObject * sender, const char * signal, const QObject * receiver, const char *member ) static p其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件 Signal和Slot的连接(2/2) p在使用connect()函数进行来接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) ); Signal和Slot的连接方式 Signal和Slot的自动关联 使用Designer,它很便捷地在接口和用户代码之间提供自动关联。on_ object name _ signal name ( signal parameters )on_addButton_clicked();on_deleteButton_clicked();on_listWidget_currentItemChanged(QListWidgetItem*,QListWidgetItem*) 通过调用QMetaObject:connectSlotsByName触发QT常用类-QObject(1/4)p QObject是Qt类体系的唯一基类,是Qt各种功能的源头活水,就象MFC中的CObject和Dephi中的TObject l 对象树:QObject 在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject 时,它就被添加到父对象的children()列表中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。 l 事件:事件是由窗口系统或qt本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但大多数事件是由于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立产生的还有一些,比如定时器等,是由系统独立产生的。 QT常用类-QObject内省方法(2/4)p QObject的内省函数:l metaObject() ;得到某类的元对象指针l className() 返回类的名字,l inherits(); 返回值bool ,确定是否是某一基类的派生类l connect();连接信号和槽函数l disconnect(); 释放信号和槽p QObject总结l Qt是通过QObject、QMetaObject类实现其内省机制,l QObject暴露给用户的共有自省方法有objectName(), inherits(), isWidgetType()等l 大多数自省方法是QObject派发给QMetaObject实现 (e.g. QMetaObject:className,),元对象模型编译器moc负责自省方法的实现l 更多自省方法定义在QMetaObject,而是为了等信号槽通讯、事件派发等机制QT常用类-Application(3/4)uQApplication和QWidget都是QObject类的子类。uQApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的。QT常用类-Widdget(4/4)lQWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上。 lQWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类。 QT事件运行机制模块部件类p 窗口类主窗口类-QMainWindow有工具模式和帮助窗,拖动,关闭-QDockWidget提供工具的使用QToolBar对话框类-QDialogp 网络编程设计QTcpSocket、QTcpServer、QUdpSocketp I/O 相关类QBuffer、QFile、QFtp、QHttp、QSocket、QTextStream、QSettingp 数据库部件QSqlDatabasep 脚本部件QScriptClassp 线程部件QThreadp 日期与时间定时器:QDate、QTime、QTimer常用控件lQString 和 char * 之间的互相转换lCheck Box 检查框lRadio Button单选按钮lQComboBox 组合框llineEdit 单行文本编辑框lQSpin Box步进按钮lpusbButton按钮QStringp 中文QT类文档http:/ *chUser=“ root”char *chp;(1) / char * 转换成转换成 QStringQString qUser = QString(QLatin1String(chUser) ;(2) / QString 转换成转换成 char *chp = QString. toLatin1().data();(3) int 和和 QString 之间的转换之间的转换int a=10;QString b;b=QString:number(a)(4)QString 转转intQString a=120int b;b=a.toInt();(5) 用qDebug 进行调试,include void qDebug ( const char * msg, . )bool isNull () constbool isEmpty () constuint length () constint toInt ( bool * ok = 0, int base = 10 ) constconst char * ascii () const (obsolete)const char * latin1 () constQCString utf8 () constQCString local8Bit () constQStringListpQStringList 定义一个字符串数组u主要方法l 操作符:operator() 在列表末尾添加值x。返回这个列表的引用。QStringList ComList; ComList COM1 COM2 COM3 COM4 COM5 COM6 COM7 label_4-setText(QString:fromLocal8Bit(登录中。);就可以正确显示中文了,fromLocal8Bit 会根据当前中文编码进行转换,不论是UTF-8还是GBK编码都可以正确转换。QRadioButtonQRadioButton和和QGroupBoxQGroupBox l 需要先放一个GroupBox,l 然后把Radio Button 拖到GroupBox中,形成一组,这样就构成了单选按钮,每次只能选中一个。l 可以在某一个按钮上设置缺省选中的状态。属性checked 打钩。l 常用的方法 boolisChecked () const / 返回值true,选中,false未选中 voidsetChecked ( bool ) / 参数true设置选中转台,false取消选中状态QComboBox 组合下来框组合下来框 p 设置组合框中的项目的方法设置组合框中的项目的方法l 手工添加法-双击组合框,点击+号,添加选项。l 程序添加AddItem (const QString & text)for(i=0;iSNComBox-addItem(ComList.at(i); addItems ( const QStringList & texts )p 设置、获取当前条目索引设置、获取当前条目索引 intcurrentIndex () const / 获取当前选中的条目voidsetCurrentIndex ( int index ) / 设置当前选中的条目,从0算起ui-cbPort-setCurrentIndex(2); / 设置i=ui-cbPort-currentIndex(); / 获取lineEdit 单行文本框 p 方法: QStringtext () const voidsetText ( const QString & )p 注意, text的返回值和setText的参数都是QString格式,转换成char *格式的。SpinBoxp 属性:步长增大或减小按钮,注意最大值最小值和步长属性minimum、maximum、singlestepp 常用方法,分别获取当前spinbox的值和设置当前spinbox的值。 Int value () constvoidsetValue ( int val )p 信号 voidvalueChanged ( int i ) voidvalueChanged ( const QString & text ) 当spinbox的值变化时,会发出以上两个信号,可定义相应的槽函数处理这个信号。QT 实战小项目-简易计算器p 利用spinbox 、combox、Label、设计一个简单的计算器 放入2个spinbox,分别相应valueChanged(int)信号的槽函数,每个槽函数中把2个spinxbox的当前值取出来根据Combox中的操作符,进行2个数的运算将运算结果显示在“=”号后面的标签中。QT网联网平台配置程序ZigbeeCfg主要功能p利用串口和物联网平台通讯p设置zigbee节点的属性: 通道 PANID号 设备类型:协调器、路由器、 传感器类型:温度、湿度、红外线。zigbeecfg主要模块p Zigbeecfg.h 头文件l 串口线程类class SerialMonitorThread : public QThreadpublic: SerialMonitorThread(ZigBeeCfg *_pParent):QThread() pParent = _pParent; virtual void run();private: ZigBeeCfg *pParent;l配置类class ZigBeeCfg : public QWidget Q_OBJECTpublic: ZigBeeCfg(QWidget *parent = 0); ZigBeeCfg();i:ZigBeeCfg *ui; Win_QextSerialPort *myCom; QString gCom; int gBaud; int gChannel; int gPanid; int gDevtype; int gSensortype;private slots: void on_ResetButton_clicked();。Zigbeecfg主要流程l Zigbeecfg()构造函数中初始化各个控件,并创建串口线程pThread = new SerialMonitorThread(this);l 点击 “连接串口” ,按钮,按按钮对应的槽函数new一个串口类,并且调用open打开串口,根据串口参数初始化串口。同时启动串口线程,一直在等待接收串口数据。l Zigbeecfg和zigbee 协议栈平台遵循一定的数据接口约定,比如说串口数据都是以:02开头+长度+命令+数据。l 选择设备阶段需要配置的信息,点击相应的按钮,把数据发送到zigbee平台l Zigbee平台返回处理结果,配置程序进行校验。l 挑战:将此程序移植到挑战:将此程序移植到Linux平台,主要是更换串口读平台,主要是更换串口读写部分写部分win_开头的程序和头文件,换成开头的程序和头文件,换成posix_开头的文开头的文件。件。QT