QT基础学习知识整理

上传人:飞*** 文档编号:43799147 上传时间:2018-06-07 格式:DOC 页数:25 大小:922KB
返回 下载 相关 举报
QT基础学习知识整理_第1页
第1页 / 共25页
QT基础学习知识整理_第2页
第2页 / 共25页
QT基础学习知识整理_第3页
第3页 / 共25页
QT基础学习知识整理_第4页
第4页 / 共25页
QT基础学习知识整理_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《QT基础学习知识整理》由会员分享,可在线阅读,更多相关《QT基础学习知识整理(25页珍藏版)》请在金锄头文库上搜索。

1、QT 基础学习知识整理1. 重要内容:1) 信号和槽机制2) 事件处理机制3) 布局管理器4) 绘图5) 网络6) 多线程7) 其他(定时器,中文显示)2.1 一个简单的例子不可免俗的,从最简单的基本窗口产生开始介绍,窗口标题就叫作 First Qt!好了,请新增一个目录 hello,并在当中使用任一编辑器来编辑一个 hello.cpp 的档案,内容如下: hello.cpp #include #include int main(int argc, char *argv) QApplication app(argc, argv);QLabel *label = new QLabel(“Hell

2、o!World! Orz.“);label-setWindowTitle(“First Qt!“);label-resize(200, 50);label-show();return app.exec(); 要使用 Qt 的组件,必须含入(include)相对应的头文件,程序的第一行包含的QApplication 与 Qlabel 头文件,稍后才可以使用 QApplication 与 QLabel 两个组件的定义类别。每个 Qt 窗口程序,都必须有且只能有一个都必须有且只能有一个 QApplicationQApplication 对象,它管理了整个应用程序所对象,它管理了整个应用程序所需的资源

3、需的资源,QLabel 是 Qt 的图型组件之一,继承自 QWidget,Widget 这个名称来自 Window Gadget,表示可视的使用者接口组件,可接受使用者的动作操作,文字画面、按钮、滚动条、工具列甚至容器(Container)等都是一种 Widget。C+程序从 main 开始,再来进行 Qt 组件的初始化动作,在第一行中: QApplication app(argc, argv);QApplication 负责程序的初始、结束及处理事件(event)的循环等,并提供基本的窗口外观,这个外观与系统的桌面环境有关,例如标题列的样式、窗口外观、系统功能键等,在不同的操作系统桌面环境下

4、,会有各自不同的外观,QApplication 对象接受命令列自变量作为它的自变量,像是如果您没有设定窗口标题,且会使用执行文件的名称作为窗口标题名称,可以使用的自变量与其作用,可以查询 Qt 在线文件关于 QApplication 类别的说明。 接着建立 QLabel 组件,它用以显示所指定的文字(在这边指定了“Hello!World! Orz.“),setWindowTitle()用以设定窗口标题,如果不设定标题,则会自动以程序的文件名称作为标题,resize()方法用以设定组件的长、宽,单位是像素(Pixel),QtQt 的组件预设是的组件预设是不可视的,所以要使用不可视的,所以要使用

5、show()show()方法将之显示出来。方法将之显示出来。在最后一行,执行 QApplication 的 exec()方法,这将程序的控制权交给了QApplication,exec()方法会提供一个事件处理循环,窗口显示之后会不断倾听(listen)事件,像是键盘、鼠标等动作所引发的事件,写好程序存盘之后,就可以开始进行 make 的动作,必须先产生 Makefile,Qt 提供了 qmakeqmake程序来协助建立 Makefile,它可以自动根据目前目录下档案产生*.pro 的专案档(project file): qmake -project然后根据项目档产生 Makefile: qma

6、ke 接下来就可以进行 make: make make 完成之后,可以在 debug 目录下找到产生的 hello.exe 档案,直接执行: hello如果您要可以在 Windows 下直接 double click 就执行程序,记得系统环境变量中要设定 PATH包括 Qt 安装目录下的 bin 目录,执行时的参考画面如下所示:如果要建构 release 版本,则使用 make 时指定-f 与 Makefile 名称,例如: make -f Makefile.Release则您可以在 release 数据夹下看到建构好的档案。QLabel 支持 HTML 卷标,如果您把程序改为以下的内容:#i

7、nclude #include int main(int argc, char *argv) QApplication app(argc, argv);QLabel *label = new QLabel(“Hello!World!Hello!World!Orz.“);color=redOrz.“);label-setWindowTitle(“First Qt!“);label-resize(200, 50);label-show();return app.exec(); 重新建置之后,执行结果将显示如下:2.2 信号和槽机制信号和槽用于对象间的通讯。信号/槽机制是 Qt 的一个中心特征并且也

8、许是 Qt 与其它框架非常不同的核心特性。在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口 部件。更一般地,我们希望任何一类的对象可以和其它对象进行通讯。例如,如果我们正 在解析一个 XML 文件,当我们遇到一个新的标签时,我们也许希望通知列表视图我们正 在用来表达 XML 文件的结构。较老的工具包使用一种被称作回调的通讯方式来实现同一目的。回调是指一个函数的 指针,所以如果你希望一个处理函数通知你一些事件,你可以把另一个函数(回调)的指 针传递给处理函数。处理函数在适当的时候调用回调。回调有两个主要缺点。首先他们不 是类型安全的。我们从来都不能确定处理函数使用了正确

9、的参数来调用回调。其次回调和 处理函数是非常强有力地联系在一起的,因为处理函数必须知道要调用哪个回调。一个关于一些信号和槽连接的摘要图在 Qt 中我们有一种可以替代回调的技术。我们使用信号和槽。当一个特定事件发生的 时候,一个信号被发射。Qt 的窗口部件有很多预定义的信号,但是我们总是可以通过继承 来加入我们自己的信号。槽就是一个可以被调用处理特定信号的函数。Qt 的窗口部件又很 多预定义的槽,但是通常的习惯是你可以加入自己的槽,这样你就可以处理你所感兴趣的 信号。信号和槽的机制是类型安全的信号和槽的机制是类型安全的:一个信号的签名必须与它的接收槽的签名相匹配。 (实 际上一个槽的签名可以比它

10、接收的信号的签名少,因为它可以忽略额外的签名。 )因为签名 是一致的,编译器就可以帮助我们检测类型不匹配。信号和槽是宽松地联系在一起的:一一 个发射信号的类不用知道也不用注意哪个槽要接收这个信号。个发射信号的类不用知道也不用注意哪个槽要接收这个信号。Qt 的信号和槽的机制可以保 证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。信信 号和槽可以使用任何数量、任何类型的参数。号和槽可以使用任何数量、任何类型的参数。它们是完全类型安全的:不会再有回调核心 转储(core dump)。从 QObject 类或者它的一个子类(比如 QWidget 类)继承的所有类可以包含信号

11、和 槽。当对象改变它们的状态的时候,信号被发送,从某种意义上讲,它们也许对外面的世 界感兴趣。这就是所有的对象通讯时所做的一切。它不知道也不注意无论有没有东西接收 它所发射的信号。这就是真正的信息封装,并且确保对象可以用作一个软件组件。例子以下的例子将看到有参数的 Signal 发送及 Slot 接受,并也将介绍 Qt 组件的parent/child 关系,这个程序将建立一个 LCD 数字显示组件,以及一个拉杆组件,LCD 数字将反应目前拉杆的进度:#include #include #include #include int main(int argc, char *argv) QAppli

12、cation app(argc, argv);QWidget *parent = new QWidget;parent-setWindowTitle(“Signal parent-setMinimumSize(240, 140);parent-setMaximumSize(240, 140);QLCDNumber *lcd = new QLCDNumber(parent);lcd-setGeometry(70, 20, 100, 30);QSlider *slider = new QSlider(Qt:Horizontal, parent);slider-setRange(0, 99);sli

13、der-setValue(0);slider-setGeometry(70, 70, 100, 30);QObject:connect(slider,QObject:connect(slider, SIGNAL(valueChanged(int),SIGNAL(valueChanged(int), lcd,lcd, SLOT(display(int);SLOT(display(int);parent-show();return app.exec(); 在 Qt 中建立 Widget 时,要建立在 heap 区(即以 new 的方式),QtQt 会自动管理会自动管理 parentparent 下

14、下childchild 的的 deletedelete,让您不用亲自管理具有,让您不用亲自管理具有 parent/childparent/child 关系的关系的 WidgetWidget 建构与删除,这可以避建构与删除,这可以避免免 memorymemory leakleak,您要,您要 deletedelete 的只有那些没有的只有那些没有 parentparent 的对象,如果您将对象建立在的对象,如果您将对象建立在 stackstack 区,区,程序将可能会有错误发生。程序将可能会有错误发生。QWidget 是 Qt 中所有使用者图形接口组件的父类别,可在屏幕上绘制自身,可接受鼠标、键

15、盘等接口操作,一个 QWidget 可以指定它的 parent 为哪个组件,而这也表示 child 可显示的范围将是在 parent 之内,parentparent 没有显示的话,子组件也不会显示没有显示的话,子组件也不会显示。没有指定 parent 的QWidget 是一个独立窗口(window)。在程序中建立了一个 QWidget 实例,并设定它的标题名称,以及可拉动的最大(setMaximumSize)最小(setMinimumSize)尺寸,由于都设定为 240X140 像素大小,所以这个窗口就变为不可变动大小的了,也可以只使用一个 setFixedSize()方法来设定:QWidge

16、t *parent = new QWidget;parent-setWindowTitle(“Signal parent-setMinimumSize(240, 140);parent-setMaximumSize(240, 140);这个 QWidget 没有指定 parent,所以它是一个独立窗口,接下来的 QLCDNumber 实例建立时,指定了这个 QWidget 为它的 parent,所以 QLCDNumber 被置入了 QWidget 之中成为 child,可显示的范围限制在 parent 的边界大小之中,它在 parent 中的位置为 X: 70、Y: 20,长为100、宽为 30(setGeometry()): QLCDNumber *lcd = new QLCDNumber(parent);lcd-setGeometry(70, 20, 100, 30);接下来的 QSlider 实例在建立时,也指定了这个 QWidget 为它的 parent,程

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号