QT界面编程(一)要点_第1页
QT界面编程(一)要点_第2页
QT界面编程(一)要点_第3页
QT界面编程(一)要点_第4页
QT界面编程(一)要点_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、QT 编程基础1.QT 简介1.1. 简介( 1) Qt 是 Trolltech 公司的标志性产品,是一个跨平台的 C+ 图形用户界面( GUI )工 具包。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。 Qt 是完全面 向对象的很容易扩展,并且允许真正地组件编程。( 2) Qt 支持下述平台:MS/Windows - 95 、 98、 NT 4.0、 ME 、 2000Unix/X11 - Linux 、 Sun Solaris、 HP-UX 、 Compaq Tru64 UNIX 、 IBM AIX 、 SGI IRIX 和其它 X11 平台 Macintosh - Mac

2、 OS XEmbedded - 有帧缓冲(framebuffer) 支持的Linux 平台。( 3) Trolltech 公司采用双重授权模式,一种用于商业性质的授权,一种用于免费的开源授权。Qt 企业版和 Qt 专业版提供给商业软件开发。 它们提供传统商业软件发行版并且提供免费升级和技术支持服务。Qt自由版是Qt仅仅为了开发自由和开放源码软件提供的Unix/X11版本。在GPL协议下,它是免费的。Qt/E 自由版是 Qt 为了开发自由软件提供的嵌入式版本。在GPL 协议下,它是免费的。1.2. 特点( 1)可移植性: QT 不仅适用于UNIX ,同样适用于Windows 。为了同时拥有世界上

3、几百万 UNIX 用户以及几百万的 Windows 用户, 最好的办法是采用一个既适用于UNIX , 又适用于 Windows 的 GUI 工具包,其答案是QT 。( 2)易用性:Qt 为专业应用提供了大量的函数,在Qt 的 API 中含有大约250 个 C+类, 大多数的类都是GUI 专有。 而且 QT 是基于 C+ 构造, 所以 QT 也具有面向对象编程的所有优点。( 3)构件支持:Qt提供信号(signal)和插槽(slot)概念,这是一种类型安全的方法,它允许回调,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt 非常适合于真正的构件编程。( 4)国际化:Qt 为本地化应

4、用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言, Qt 还支持双字节16bit 国际字符标准。( 5)运行速度:QT 非常容易使用,且也具有很快的速度。 QT 的易用性和快速是密不可分的。 这一优点要归功于 QT 开发者的辛苦工作, 他们花费了大量的时间来优化他们的产品。 QT 比其他许多 GUI 工具包运行速度快的原因是其实现方式。 QT 是一个 GUI 仿真工具包, 即它不使用本地工具包作调用, 而是使用各自平台上的低级绘图函数, 从而提高程序速度。1.3. QT 工程1.3.1. Qt 工程编辑以下是编写 Qt工程文件(*.Pro)的变量说明:(1) TEMPL

5、ATE变量 TEMPLATE 描述了为建立目标文件而采用何种模板,即生成何种形式的Makefile文件。 qmake 工具定义了 5 种模板:应用程序App, 为建立一个Qt 应用程序创建Makefile 文件 ;库 lib, 为建立引用程序库而创建 Makefile 文件 ;子工程subdirs,为建立子目录下的目标文件创建一个Makefile文件,子目录通过变量SUBDIRS 指定(子目录下的工程文件也需要指出使用何种模板);VC应用程序vcapp,为Visual Studio生成一个应用程序工程。仅仅用语 Windos操作 系统 .VC库vclib,为Visual Studio生成一个应

6、用程序库工程,仅仅用语 Windows操作系统.(2)TARGET描述了目标文件的名称,也就是应用程序的名字(或者说exe文件的名称)。如果不设置 与 pro 文件名称相同。(3)DEPENDPATH描述了建立应用程序所依赖的其他文件所在的路径.(4)INCLUDEPATH描述了编译该工程时编译器需要搜索的 #include 路径 .HAND(5)SOURCES告诉编译器, 源代码文件路径及其文件名字.(6)DESTDIR定义了 exe 文件的路径.(7)CONFIG定义了编译选项debug :表示建立的目标代码是调试版本,如果没有则为 Release版本.warn_on : 要求编译器在编译

7、应用程序时打开警告开关 .(8)OBJECTS_DIR描述了存放中间文件(.o)文件的位置.(9)VERSION描述软件版本例如:PROJECT = QESPTATEMPLATE = app / subdirs 表示在 工程在子文件中还包含工程SUBDIRS=src/ 子工程文件的目录由 SUBDIRS 指定DEPENDPATH += .INCLUDEPATH += ./.QMAKE_LIBDIR += ././buildOBJECTS_DIR = objMOC_DIR = mocUI_DIR = uicCONFIG += qt thread warn_onHEADERS +=

8、 MainWindow.h MessageWindow.h QespTest.h CommandWindow.h defs.hSOURCES += main.cpp MainWindow.cpp MessageWindow.cpp QespTest.cpp CommandWindow.cppTARGET =./bin/builtinCONFIG(debug, debug|release):LIBS += -lqextserialportd else:LIBS += -lqextserialportunix:DEFINES = _TTY_POSIX_ win32:DEFINES = _TTY_W

9、IN_1.3.2. Qt 工程编译编译一个C+应用程序,你需要创建一个 makefile。创建一个Qt的makefile的最容易 的方法是使用 Qt提供的连编工具 qmake。如果你已经把 main.cpp保存到它自己的目录了, 你所要做的就是这些:qmake -project qmake第一个命令调用qmake来生成一个.pro (项目)文件。第二个命令根据这个项目 文件来生成一个(系统相关的)makefile。你现在可以输入 make (或者nmake,如果你使用 Visual Studio ) ,然后运行你的第一个Qt 应用程序!1.4. 程序实例#include int main(in

10、t argc,char* argv)QApplication app(argc,argv);QTextCodec:setCodecForTr(QTextCodec:codecForLocale();QWidget* w = new QWidget;QPushButton* pushButton = new QPushButton (tr( “退出 ”), w);w-show();QObject:connect(pushButton, SIGNAL( clicked(), w, SLOT( close() ); return app.exec();( 1 )初始化QApplication a(a

11、rgc, argv);在 Qt 应用程序中,首先要创建一个QApplication 对象, QApplication 类负责图形用户界面应用程序的控制流和主要设置。它包含在main() 函数的事件循环体中,对所有来自Window 系统和其它源文件的事件进行处理和调度,还包括处理应用程序的初始化和结束, 并且提供会话管理。它还处理系统级和应用程序级的设置。在 Qt 应用程序中,不管有多少个窗口, QApplication 对象只能有一个,而且必须在其 他对象之前创建。( 2 )国际化QTextCodec:setCodecForTr(QTextCodec:codecForLocale()setCo

12、decForTr 函数可以设置QObject:tr() 的编码方式, 如果采用默认值, 则会是 Latin-1.假若程序中出现的字符不是Latin-1 编码方式,这个函数可以用来设置正确的编码方式。而codecForLocale 函数返回了本地区的编码方式的 codec 指针。Qt使用Unicode(统一编码)来存储,绘制及操作字符串。但在很多情况下你可能希望用不 同的编码来处理数据。 所以 Qt 提供了一组 QTextCodec 类族来帮助用户将非Unicode 格式与Unicode格式进彳T转换.你也可以创建自己的codec类。( 3 )创建窗口QWidget* pWidget=new Q

13、Widget();QWidget 是所有用户接口对象的基类。 部件是用户接口的基础: 它从窗口系统接收鼠标、键盘和其它事件,并在屏幕上绘制自身。每个部件都是矩形的,并且以 Z-order 排列。每个 部件都处于其父部件和子部件之间。一个没有父部件的部件称为一个窗口。 通常,窗口有一个边框和标题栏,当然也可以使用合适的标志来创建一个没有这些元素的窗口 . 在 Qt 中 , QMainWindow 以及 Qdialog 的 各种子类是最常用的窗口类型。每个部件的构造函数接受一个或两个标准的参数 : 第一个参数QWidget *parent = 0 是此部件的父部件,如果取默认值0 ,则新部件是一个

14、窗口;如果不为 0 则它是 parent 的子部件,会被限制在parent 的几何范围之内。 第二个参数Qt:WindowFlags f = 0 设置窗口标志,默认值适应几乎所有的部件。不过如果需要没有边框的窗口,则需要设置特殊的标志。(4)创建组件QPushButton* pushButton = new QPushButton (tr( “退出 ”), w);添加子组件 pushButton到父组件 pWidget中;也可以用 setWidget()方法实现。pWidget-show();从顶层部件开始, 依次显示窗口中的各部件。 组件创建时一般是不可见的, 这样的好处 在于避免大量组件创

15、建时造成的屏幕闪烁现象,要使组件可见需要调用 QWidget 类的成员函数show()来显示组件。(5)注册事件(信号槽)QObject:connect(pushButton, SIGNAL( clicked。), w, SLOT( close();给按钮pushButton对象添加clicked信号的处理事件槽 close,关闭窗口。(6)执行返回return app.exec();进入主事件循环,直到调用 exit(), quit()或关闭主窗口,程序必须调用此函数进入事件 处理,主事件循环从窗口系统接收事件,并派送给相应的部件。1.5. 执行过程整个Qt应用程序的执行过程2.信号槽(1)

16、机制:QT提供了信号和槽机制。信号是一个特定的标识:一个槽就是一个函数,与 一般的函数不同,槽函数既能够和信号关联,又可以象普通函数一样直接调用。当某个事件出现时,通过发送信号,可以将与之相关的槽函数激活,即执行槽函数代码。信号和槽是宽松地联系在一起的:一个发射信号的类不用知道也不用注意哪个槽要接收 这个信号。Qt的信号和槽的机制可以保证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。 信号和槽可以使用任何数量、 任何类型的参数。 它们是完全类型安全的:不会再有回调核心转储 (core dump) 。槽实际上是标准的成员函数(作为类成员的函数),因此可以直接调用它们;

17、而且它们增加了一些特殊的功能使它们能够连接到信号。 每当槽所连接的信号被发射时,槽(函数) 就 被执行。信号也是成员函数, 但是,它们的实现有一点不同。当对象内部发生某些事件时, 它能够发出信号。如果这个信号连接到槽,那么那个槽(函数)就被执行。可以将多个槽连接到同一个信号,那么这些槽就将一个接一个地被执行,其执行顺序是任意的。 因此, 信号是一种特殊类型的函数。它们被定义为当某个事件发生时就被发射。( 2)前提:信号 /槽技术非常特殊。实际上,需要特殊的编程语句才能创建信号和槽。因此C+编译器不能理解这些语句,因此,完成这两项工作必须使用特殊的工具,即元对象编译 器(meta object

18、complier,MOC)。这一工具扫描源文件中用于创建信号和槽的特殊语句,并将 它生成为有效的C +代码。使用元对象编译器时,将自定义类声明放在头文件中,并在第一句加上宏Q_OBJECT ;再使用 qmake 工具生成 makefile ,则 makefile 会自动调用 moc 工具对自定义信号和槽进行 处理。2.1. 声明定义Class MyMainwindow:public QWidgetQ_OBJECTPublic:MyMainwindow();Void setValue(int);Public slots:Void ChangeValue(int);Signals:Void Val

19、ueChanged(int);注意:( 1)需要将类的声明单独放在一个头文件中(2)凡是包含signal 和 slot 的类中都要加上Q_OBJECT 的定义(3)使用qmake 工具生成 makefile ,或者手动使用 moc 工具进行编译链接(4) slots函数修饰符可以是 private、protected、public,其意义和 C+中相同。( 5)通常情况下,信号和槽的参数应该是匹配的,但有时一个信号所给出的信息比其已连接槽所需要的信息要多,则可根据需要配置参数类型(或无参数) 。Void MyMainWindow:setValue(int value)if(value!=old

20、value)oldvalue=value;emit valueChanged(value);注意:信号和槽一类的普通函数不同,它只能使用 emit 关键字发射。2.2. 连接与取消2.2.1. 信号槽连接在signal和slot声明以后,需要使用 connect。函数将它们连接起来。connect。函数属于QObject 类的成员函数,它能够连接signal 和 slot ,也可以用来连接signal 和 signal 。函数原形如下:bool Connect(const Qobject* sender, const char* signal, const Qobject* receiver,

21、 const char* method, Qt:ConnectionType type=Qt:AutoConnection)(其中第参数1 和参数 3 分别指出 signal 和 slot 是属于那个对象或组件, 参数 5为连接类型)也可以使用SIGNAL()和SLOT()这两个宏,方法如下:QObject:connect( sender, SIGNAL( valueChanged(int), recver , SLOT( setNum(int) );(参数 1 为信号发送者, 参数 2 为发送的信号, 参数 3 为信号接收者, 参数 4 为信号接收者的槽函数). 连接类型信号槽

22、的连接类型Qt:connectionType 有三种:( 1) Qt:DirectConnection( 立即连接 ): 信号发送后立即传递给相关的槽,只有槽函数执行完毕后返回后,发送信号emit 之后的代码才被执行。( 2) Qt:QueuedConnection( 排队连接 ): 信号发送后排队,直到事件循环有能力将它传递给槽;而不管槽函数有无执行,发送信号之后的代码都会立即得到执行。( 3) Qt:AutoConnection( 自动连接 ): 如果信号和槽在同一线程, 则等同于 DirectConnection, 如果不在同一线程,则信号将排队,等待事件循环的处理,等同于QueuedC

23、onnection 。.连接方式( 1)一个信号连接一个槽QObject:connect( sender,( 2)一个信号连接多个槽QObject:connect( sender,QObject:connect( sender,SIGNAL(valueChanged(int),SIGNAL(valueChanged(int),SIGNAL(valueChanged(int),QObject:connect( sender, SIGNAL(valueChanged(int),recver , SLOT(setNum(int) );recver1 , SLOT(setNum(int)

24、 );recver1 , SLOT(change(int) );recver 2, SLOT(update(int) );3)多个信号连接多一个槽QObject:connect( sender1,QObject:connect( sender1,QObject:connect( sender2,( 4)一个信号连接另一个信号SIGNAL(valueChanged(int), recver , SLOT(setNum(int) );SIGNAL(update(int), recver , SLOT(setNum (int) );SIGNAL(valueChanged(int), recver,

25、SLOT(setNum (int) );QObject:connect( sender, SIGNAL(valueChanged(int), recver , SIGNAL(update(int) );2.2.2. 信号槽取消函数原形如下:QObject:disconnect(sender, SIGNAL(overflow(), recver, SLOT(handleMathError();取消一个连接不是很常用,因为 Qt 会在一个对象被删除后自动取消这个对象所包含的所有的连接。2.3. 使用方法2.3.1. 手动连接直接使用上述信号槽连接方式连接:QObject:connect( send

26、er, SIGNAL(valueChanged(int), recver , SLOT(setNum(int) );2.3.2. 自动连接Qt 的元对象提供了信号和槽的自动关联。 如果能够按照以下的规则命名槽函数 ,那么 QT 就能够自动进行关联:void on_部件对象名_信号名(信号参数 例如:private slots:void on_browsePushBtn_clicked();等价于Connect(browsePushBtn,SIGNAL(clicked(),this,SLOT(browse();注意: (自动连接的其它两个必要条件)1 .自动连接时,“on_”后面为对象名,而非对

27、象变量名;也就是说,对象名和对象变量名 可以不相同;对象变量通过setObjectName()方法来指定对象名。2 . 要使用自动连接, 就必须指定连接方式; 通过调用 QMetaObject:connectSlotsByName() 方法指明由对象名来解析信号槽连接。且该方法必须放在对象定义之后才可使用。2.4. 扩展1) 信号槽应用于对象间通信。2) 信号槽的处理借助于 moc( Meta Object Compiler )工具, Q_OBJECT 宏通知 compiler 使用 moc工具进行 moc扩展。(3)对象中的信号不是真正的函数,编译时由 moc自动产生,返回类型 void ,

28、槽是函数。4) 多个被触发者执行顺序随机。5) 在非跨线程场景下, 槽返回后, emit() 才返回。 此时 Object:connect 函数的 ConncetionType 参数为 Qt:DirectConnection 。6) 槽参数不能有缺省值。7) public slots: 任何对象的信号或槽都可以触发; protected slots:当前类中的对象与子类中的对象的信号或槽可以触发; private slots:本类中定义的信号或槽可以触发。8) 信号形参会全部传递给槽,但后者不一定全部接收。9) moc 不扩展宏,所以信号与槽参数中不能包含宏。10)构造函数、嵌套类与友元类,不

29、能在signals: or slots: 区域内声明。11) typedef 之前,函数指针与模板类不能作为槽的参数。3. 布局管理QT 中提供了布局管理器,可以使用它将子部件按水平或垂直方向排列起来。它可以根据上层布局管理器或上层部件的空间来计算并分成若干个小盒子, 然后将相应的部件放置其中(即可以自动调整子部件大小) 。3.1. 布局类型创建布局管理器最简单的方法是使用派生类, 当然也可以直接使用基类来创建, 然后指定其方向为 LeftToRight, RightToLeft, TopToBottom, 或者 BottomToTop 。常用布局管理器的派生类:( 1 )水平布局:QHBox

30、Layout( 2 )垂直布局:QVBoxLayout( 3 )网格布局:QGridLayout (多行多列)3.2. 常用方法(1) 添加子布局管理器:如果 QBoxLayout 不是顶层的布局管理器, 则必须将其加入到它的上层布局管理器当中。最常用的方法是: parentLayout-addLayout().(2)布局管理器添加部件:addWidget(): 加入部件并设置其部件的拉伸系数。addSpacing():创建一个空的小盒子,使得窗口部件之间布局更合理美观addStretch():创建一个空的,可拉伸的小盒子。addLayout(): 添加另一个布局管理器并设置其拉伸系数。(3)

31、布局管理器设置边距:setContentsMargins(): 设置一个部件的外框与布局管理器四周的距离。 .setSpacing():设置相邻的两个部件之间的间距。(可以使用addSpacing()来力口添间距)(4)布局管理器移除部件:removeWidget() :移除一个部件QWidget:hide(): 也可以将部件从布局管理器移除,除非再次调用 QWidget:show()4. Qt 样式表QT 样式表是从QT4.2 开始引入的窗口部件外观的机制,类似于 HTML 的层叠样式表。通过调用 QWidget:setStyleSheet()或 Application:setStyleSh

32、eet(),你可以为个独立的子 部件、整个窗口,甚至是整个个应用程序指定一个样式表。样式表是通过 QStyle 的一个叫做QStyleSheetStyle 的特殊子类来实现的。 这个特殊的子类实际上是其他的系统特定风格类的包裹类, 它会把通过样式表指定的自定义外观风格应用在底层的系统特定风格之上。4.1. 样式规则样式表由一系列的样式规则构成,一个样式规则由选择器和属性组成。语法形式如下:selector attribute: value 选择器(selector)部分通常是一个类名(例如QComboBox),当然也还有其他的语法形式。 它确定哪些窗口部件受规则影响。属性 (attribute

33、) 部分是一个样式表属性的名字, 值 (value) 部分是赋给该属性的值。它说明了在窗口部件上应用哪些属性。为了使用方便,我们还可以使用一种简化形式:selector1, selector2, ., selectorM attribute1: value1;attribute2: value2;.attributeN: valueN;注:1. 在有的资料中,选择器被叫作选择符;属性被叫作定义。2. Qt 样式表对大小写不敏感;但对类名、对象名和属性名大小写敏感。 (即对属性值不区分大小写)4.2. 特殊样式规则4.2.1. 伪状态样式部件的外观可以按照用户界面元素状态的不同来分别定义,这在样

34、式表中被称为 “伪状态” 。 选择器可以包含伪状态来表示窗口部件的状态, 如以下定义了鼠标在 QPushButton 上悬停时的规则: QPushButton:hover color:white下面是可用的伪状态列表:伪状态 描述:checked button 部件被选中:disabled 部件被禁用:enabled 部件被启用:focus 部件获得焦点:hover 鼠标位于部件上:indeterminate checkbox 或 radiobutton 被部分选中:off部件可以切换,且处于off 状态:on部件可以切换,且处于on 状态:pressed 部件被鼠标按下:unchecked

35、button 部件未被选中4.2.2. 子部件微观样式许多部件都包含有子元素,这些元素可以称为 “子部件 ”。 Spin box 的上下箭头就是子部件最好的例子。子部件可以通过:来指定,例如 QDateTimeEdit:up-button。定义子部件的样式与定义部件非常相似,它们可以拥有自己的边框、 背景等,并且也可以和伪状态联合使用(例如QSpinBox:up-button:hover ) 。下表列出了可用的子部件类型:子部件 描述:down-arrow combo box 或 spin box 的下拉箭头:down-button spin box 的向下按钮:drop-down combo

36、 box 的下拉箭头:indicator checkbox 、 radio button 或可选择 group box 的指示器:item menu、 menu bar或 status bar的子项目:menu-indicator push button 的菜单指示器:title group box 的标题:up-arrow spin box 的向上箭头:up-button spin box 的向上按钮通过指定 subcontrol-position 和 subcontrol-origin 属性, 子部件可以被放置在部件内的任何位置。并且,子部件的位置还可以使用相对或绝对的方式进一步的调整。具

37、体选择何种调整方式取决于子部件具有固定的大小,还是会随着父部件而变化。. 相对定位相对定位适合于子部件具有固定大小的情形(通过 width 和 height 指定子部件大小)使用这种方式, 子部件可以以相对于subcontrol-position 和 subcontrol-origin 属性定义的原始位置进行移动调整。例如:QPushButton:menu-indicator image: url(menu_indicator.png);width: 13px;height: 13px;subcontrol-origin: padding;subcontrol-position:

38、 bottom right;当按下按钮时, 我们可以把菜单指示器从原来的位置向右下方移动几个像素来模拟按钮按下的状态。QPushButton:menu-indicator:pressed position: relative;top: 2px;left: 2px;. 绝对定位绝对定位适合于子部件的位置随父部件的变化而变的情形。与前面的例子相同,subcontrol-origin 定义了父部件的参考矩形。子部件的矩形区域则可以随后通过相对于这个参考矩形四边的偏移量来定义。QPushButton:menu-indicator border: 2px solid red;subcont

39、rol-origin: padding;position: absolute;top: 2px;right: 2px;bottom: 2px;left: 40px;对于宽度或高度固定的子部件, subcontrol-position 被用来说明其在subcontrol-origin 指定矩形内的对其方式:QPushButton:menu-indicator image: url(menu_indicator.png);width: 13px;subcontrol-origin: padding;subcontrol-position: bottom right;position: absolu

40、te;top: 2px;bottom: 2px;right: 2px;4.2.3. 层叠样式样式表可以在 QApplication 级别设置, 也可以在父窗口部件, 子窗口部件级别设置。 实际应用样式时, 则合并这几个级别的样式。当有冲突时, 窗口部件自身的样式优先使用,接下来是父窗口部件,祖先窗口部件,依次类推。4.3. 样式冲突解决当不同的规则应用到相同的属性时, 样式表就产生了冲突。 在这种情况下, 特定的规则 比通用的规则优先;伪状态比没有伪状态的优先,如果级别相同,则最后一个规则优先。5. Qt 组件类5.1. 主要基类5.1.1. Qobject 类QObject 类是所有能够处理

41、signal、 slot 和事件的 Qt 对象的基类,原形如下:QObject:QObject ( QObject * parent =0, const char * name = 0 )创建带有父对象及其名字的对象,对象的父对象可以看作为这个对象的所有者。比如,对话框是其中的 ok 和 cancel 按钮的父对象。在上面的函数中如果 parent为0则构造一个无父的对象,如果对象是一个组件,则它就 会成为顶层的窗口。QApplication 和 QWidget 都是 QObject 类的子类。5.1.2. Qapplication 类QApplication 类负责 GUI 应用程序的控制流

42、和主要的设置, 它包括主事件循环体, 负责处理和调度所有来自窗口系统和其他资源的事件, 并且处理应用程序的开始、 结束以及会话管理, 还包括系统和应用程序方面的设置。 对于一个应用程序来说, 建立此类的对象是必不 可少的。5.1.3. Qwidget 类QWidget 类是所有用户接口对象的基类,它继承了 QObject 类的属性。组件(或部件 )是用户界面的单元组成部分, 它接收鼠标、 键盘和其它从窗口系统来的事件, 并把它自己绘制 在屏幕上 .QWidget 类有很多成员函数, 但一般不直接使用, 而是通过子类继承来使用其函数功能。 如, QPushButton 、 QlistBox 等都

43、是它的子类 .5.2. 常用组件类常用组件类几乎都继承至QWidget 类,可调用其继承来的方法。常用组件类都可直接使用其对象,也可继承自定义类对象。5.2.1. QLebal 类标签类 QLebal ,为输出组件类;可将组件内容输出显示在屏幕上。常用方法:QLabel(QWidget *parent=0, Qt:WindowFlags f=0);QLabel(const QString &text, QWidget *parent=0, Qt:WindowFlags f=0);QString text() const;const QPixmap *pixmap() const;槽:void

44、setText(const QString &);void setPixmap(const QPixmap &);5.2.2. QlineEdit 类文本框类 QlineEdit ,为输入组件类;可从组件中获取输入内容。常用方法:QLineEdit(QWidget* parent=0);QLineEdit(const QString &, QWidget* parent=0);QString text() const;QString displayText() const;int maxLength() const;void setMaxLength(int);bool isReadOnly(

45、) const;void setReadOnly(bool);槽:void setText(const QString &);void clear();void selectAll();信号:void textChanged(const QString &);void textEdited(const QString &);5.2.3. QTextEdit 类文本编辑区类 QtextEdit ,为输入组件类;可获取组件内文本编辑区中的内容。常用方法:QTextEdit(QWidget *parent = 0);QTextEdit(const QString &text, QWidget *pa

46、rent = 0);void setTextCursor(const QTextCursor &cursor);QTextCursor textCursor() const;bool isReadOnly() const;void setReadOnly(bool ro);槽:void setPlainText(const QString &text);void setText(const QString &text);void cut();void copy();void paste();void clear();void selectAll();void append(const QStr

47、ing &text);信号:void textChanged();void copyAvailable(bool b);void selectionChanged();5.2.4. QComboBox 类下拉列表框类 QcomboBox ,为输入组件类;可获取用户选择的列表项。常用方法:QComboBox(QWidget *parent = 0);int count() const;void setIconSize(const QSize &size);bool isEditable() const;void setEditable(bool editable);int currentInde

48、x() const;QString currentText() const;QString itemText(int index) const;QIcon itemIcon(int index) const;void addItems(const QStringList &texts)void insertItems(int index, const QStringList &texts);void removeItem(int index);槽:void clear();void setCurrentIndex(int index);信号:void activated(int index);

49、void activated(const QString &);void currentIndexChanged(int index);void currentIndexChanged(const QString &);5.2.5. QpushButton 类按钮类 QpushButton ,通常为信号 (或事件 )发起者。常用方法:QPushButton(QWidget *parent=0);QPushButton(const QString &text, QWidget *parent=0);QPushButton(const QIcon& icon, const QString &tex

50、t, QWidget *parent=0);void setText(const QString &text);QString text() const;void setIcon(const QIcon &icon);QIcon icon() const;bool isChecked() const;槽:void click();void setChecked(bool);信号:void pressed();void released();void clicked(bool checked = false);5.2.6. QDialog 类(1) 文件对话框QfileDialog ,常用方法:

51、static QString getOpenFileName(QWidget *parent = 0,const QString &caption = QString(),const QString &dir = QString(),const QString &filter = QString(),QString *selectedFilter = 0, Options options = 0);static QString getSaveFileName(QWidget *parent = 0,const QString &caption = QString(),const QString

52、 &dir = QString(),const QString &filter = QString(),QString *selectedFilter = 0, Options options = 0);(2) 颜色对话框QcolorDialog ,常用方法:static QColor getColor(const QColor &initial = Qt:white, QWidget *parent = 0);(3) 字体对话框QfontDialog ,常用方法:static QFont getFont(bool *ok, QWidget *parent = 0);5.2.7. QMessa

53、geBox 类(1) Question 询问消息框,常用方法:static int question(QWidget *parent, const QString &title,const QString& text,int button0, int button1 = 0, int button2 = 0);(2) Information 操作提示消息框,常用方法:static int information(QWidget *parent, const QString &title, const QString& text,int button0, int button1 = 0, int

54、 button2 = 0);(3) Warning 警告消息框,常用方法:static int warning(QWidget *parent, const QString &title,const QString& text,int button0, int button1, int button2 = 0);(4) Critical 严重错误消息框,常用方法:static int critical(QWidget *parent, const QString &title, const QString& text,int button0, int button1, int button2

55、= 0);(5) About 信息提示框,常用方法:static void about(QWidget *parent, const QString &title, const QString &text);(6) aboutQt QT 信息提示框,常用方法:static void aboutQt(QWidget *parent, const QString &title = QString();5.2.8. QMainWindow 类QmainWindow 类提供了一个应用程序主窗口,包括一个菜单栏,多个工具栏,多个锚接部件,一个状态栏, 以及一个中心部件。菜单是一系列命令的列表.为了实现菜单 ,工具栏按钮,键盘快捷方式等命令的一致性,QT使用 Action 来表示这些命令。 QT 的菜单就是由一系列的 Qaction 动作对象构成的列表.状态栏通常显示GUI 应用程序的一些状态信息,它位于主窗口的最底部.可以在状态

温馨提示

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

评论

0/150

提交评论