没有合适的资源?快使用搜索试试~ 我知道了~
Document For QT.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 142 浏览量
2022-11-19
13:50:00
上传
评论
收藏 1.8MB PDF 举报
温馨提示
试读
38页
。。。
资源推荐
资源详情
资源评论
一、
Qt 概述
1、关于 Qt
Qt 是 Trolltech 公司的一个产品。Qt 是一个多平台的 C++图形用户界面应用程序框架。
它提供给应用程序开发者建立图形用户界面应用程序所需的所有功能。Qt 是完全面向对象
的,它很容易扩展,并且允许真正的组件编程。自从 1996 年早些时候,Qt 进入商业领域,
它已经成为全世界范围内数千种成功的应用程序的基础。Qt 也是流行的 Linux 桌面环境 KDE
的基础。(KDE 是所有主要的 Linux 发行版的一个标准组件)
Qt 支持下述平台:
MS/Windows - 95、98、NT 4.0、ME、和 2000
Unix/X11 - Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX 和
其它很多 X11 平台
Macintosh - Mac OS X
Embedded - 有帧缓冲(frame buffer)支持的 Linux 平台。
2、Qt 版本信息
Qt 被按不同的版本发行:
Qt 企业版和 Qt 专业版:提供给商业软件开发。它们提供传统商业软件发行版并且提供
免费升级和技术支持服务。企业版比专业版多一些扩展模块。
Qt 自由版:是 Qt 仅仅为了开发自由和开放源码软件 提供的 Unix/X11 版本。在 Q 公共
许可证和 GNU 通用公共许可证下,它是免费的。
Qt/嵌入式自由版:是 Qt 为了开发自由软件提供的嵌入式版本。在 GNU 通用公共许可
证下,它是免费的。
下表是关于 Qt 在 Windows 环境下各个版本的区别。(Qt 为 Windows 只提供了专业版和
企业版,不过自由版本的 Qt 仍然可以在 Windows 环境下使用)
组成模块
Qt 的基本模块(工具、核心、窗口部件、对话框)
与平台无关的 Qt 图形用户界面工具包和应用类
Qt 设计器
可视化的 Qt 图形用户界面的生成器
图标视图模块
几套图形用户交互操作的可视化效果。
工作区模块
多文档界面(MDI)支持
OpenGL 三维图形模块
在 Qt 中集成了 OpenGL
网络模块
一些套接字,TCP,FTP 和异步 DNS 查询并与平台无关的类
画布模块
为可视化效果,图表和其它而优化的二维图形领域
表格模块
灵活的,可编辑的表格/电子表格
XML 模块
通过 SAX 接口和 DOM Level 1 的 XML 解析器
SQL 模块
SQL 数据库访问类
X
X
X
X
X
自由版
X
X
专业版
X
X
X
X
企业版
X
X
X
X
X
3、Qt 的组成
Qt 提供了一组范围相当广泛的 C++ 类库,并包含了几种命令行和图形界面的工具,有
效地使用这些工具可以加速开发过程。
Qt Designer:Qt 设计器。用来可视化地设计应用程序界面。
Qt Linguist:Qt 语言学家。用来翻译应用程序。以此提供对多种语言的支持。
Qmake :使用此工具可以由简单的、与平台无关的工程文件来生成编译所需的 Makefile。
Qt Assistant:关于 Qt 的帮助文件。类似于 MSDN 。可以快速地发现你所需要的帮助。
moc :元对象编译器。
uic:用户界面编译器。在程序编译时被自动调用,通过ui_*.h文件生成应用程序界面。
qembed :转换数据,比如,将图片转换为 C++ 代码。
安装的过程对于不同的 Qt 平台是不同的。在 Windows 环境下安装 Qt,需要先安装
4、Qt 的安装
MinGW 。
MinGW ,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合
允许人们在没有第三方动态链接库的情况下使用 GCC (GNU Compiler C)产生 Windows32
程序。 在基本层,MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使
用微软的标准 C 运行时间库(MSVCRT.DLL ),该库在所有的 NT OS 上有效,在所有的
Windows 95 发行版以上的 Windows OS 有效,使用基本运行时间,你可以使用 GCC 写控
制台模式的符合美国标准化组织(ANSI )程序,可以使用微软提供的 C 运行时间扩展。该
功能是 Windows32 API 不具备的。下一个组成部分是 w32api 包,它是一组可以使用
Windows32 API 的包含文件和端口库。与基本运行时间相结合,就可以有充分的权利既使
用 CRT(C Runtime)又使用 Windows32 API 功能。实际上 MinGW 并不是一个 C/C++ 编
译器,而是一套 GNU 工具集合。除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有
一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。
在安装 MinGW 之后,再安装 Qt,然后更改一下 Windows 系统的环境变量,就可以在
Windows 环境下使用 Qt 了。如果想在 VC 环境下使用 Qt,那么还需要进一步编译和设置,
或者下载专门用于 VC 的 QT 版本。有关此方面的信息请参考附录。
二、 开始学习 Qt
1、Hello, Qt!
我们以一个非常简单的 Qt 程序开始 Qt 的学习。我们首先一行行的分析代码,然后我
们将会看到怎样编译和运行这个程序。
1 #include <QApplication>
2 #include <QLabel>
3 int main (int argc, char *argv [])
4 {
5 QApplication app (argc, argv);
6 QLabel *label = new QLabel ("Hello Qt!");
7 label->show ();
8 return app. exec ();
9 }
第 1 行和第 2 行包含了两个类的定义:QApplication和 QLabel。对于每一个 Qt 的类,
都会有一个同名的头文件,头文件里包含了这个类的定义。因此,你如果在程序中使用了一
个类的对象,那么在程序中就必须包括这个头文件。
第 3 行是程序的入口。几乎在使用 Qt 的所有情况下,main()函数只需要在把控制权转
交给 Qt 库之前执行一些初始化,然后 Qt 库通过事件来向程序告知用户的行为。
argc
是命
令行变量的数量,
argv
是命令行变量的数组。这是一个 C/C++特征。它不是 Qt 专有的,无
论如何 Qt 需要处理这些变量
第 5 行定义了一个 QApplication 对象 App。QApplication 管理了各种各样的应用程序的
广泛资源,比如默认的字体和光标。App 的创建需要 argc 和 argv 是因为 Qt 支持一些自己的
命令行参数。在每一个使用 Qt 的应用程序中都必须使用一个 QApplication 对象,并且在任
何 Qt 的窗口系统部件被使用之前创建此对象是必须的。App 在这里被创建并且处理后面的
命令行变量(比如在 X 窗口下的-display)。请注意,所有被 Qt 识别的命令行参数都会从
argv
中被移除(并且
argc
也因此而减少)。
第 6 行创建了一个 QLabel 窗口部件(widget),用来显示“Hello,Qt!”。在 Qt 和 Unix
的术语中,一个窗口部件就是用户界面中一个可见的元素,它相当于 Windows 术语中的“容
器”加上“控制器”。按钮(Button)、菜单(menu)、滚动条(scroll bars )和框架(frame)
都是窗口部件的例子。窗口部件可以包含其它的窗口部件。例如,一个应用程序界面通常就
是一个包含了 QMenuBar,一些 QToolBar,一个 QStatusBar 和其它的一些部件的窗口。绝大
多数应用程序使用一个 QMainWindow 或者一个 QDialog 作为程序界面,但是 Qt 允许任何
窗口部件成为窗口。在这个例子中,QLabel 窗口部件就是作为应用程序主窗口的。
第 7 行使我们创建的 QLabel 可见。当窗口部件被创建的时候,它总是隐藏的,必须调
用 show()来使它可见。通过这个特点我们可以在显示这些窗口部件之前定制它们,这样就不
会出现闪烁的情况。
第 8 行就是 main()将控制权交给 Qt。在这里,程序进入了事件循环。事件循环是一种
stand-by 的模式,程序会等待用户的动作(比如按下鼠标或者是键盘)。用户的动作将会产
生程序可以做出反应的事件(也被称为“消息”)。程序对这些事件的反应通常是执行一个或
几个函数。
为了简单起见,我们没有在 main()函数的结尾处调用 delete 来删除 QLabel 对象。这种
内存泄露是无害的,因为像这样的小程序,在结束时操作系统将会释放程序占用的内存堆。
下面我们来编译这个程序。建立一个名为 hello 的目录,在目录下建立一个名为 hello.cpp
的 c++源文件,将上面的代码写入文件中。
运行“开始程序Qt by TrolltechQt Command Prompt”。
在命令行模式下,切换目录到 hello 下,然后输入命令:qmake –project。这个命令将
产生一个依赖于工作平台的工程文件(hello.pro)。
再输入命令:qmake hello.pro。这个命令通过工程文件产生一个可以在特定工作平台
上使用的 makefile。
最后输入命令:make 来产生应用程序。运行这个程序,可以得到如下的程序界面。
Qt 也支持 XML。我们可以把程序的第 6 行替换成下面的语句:
QLabel *label = new QLabel ("<h2><i>Hello</i> " "<font color=red>Qt! </font></h2>");
重新编译程序,我们发现界面拥有了简单的 HTML 风格。如下图:
2、调用退出
第二个例子展示了如何使应用程序对用户的动作进行响应。这个应用程序包括了一个按
钮,用户可以点击这个按钮来退出程序。程序代码与上一个程序非常相似,不同之处在于我
们使用了一个 QPushButton 来代替 QLabel 作为我们的主窗口,并且我们将一个用户动作(点
击一个按钮)和一些程序代码连接起来。
1 #include <QApplication>
2 #include <QPushButton>
3 int main (int argc, char *argv [])
4 {
5 QApplication app (argc, argv);
6 QPushButton *button = new QPushButton ("Quit");
7 QObject::connect (button, SIGNAL (clicked ()),
8 &app, SLOT (quit ()));
9 button->show ();
10 return app. exec ();
11 }
Qt 程序的窗口部件发射信号(signals)来指出一个用户的动作或者是状态的变化。在这
个例子中,当用户点击这个按钮的时候,QPushButton 就会发射一个信号——clicked()。一
个信号可以和一个函数(在这种情况下我们把这个函数叫做“槽(slot)”)相连,当信号
被发射的时候,和信号相连的槽就会自动执行。在这个例子中,我们把按钮的信号“clicked()”
和一个 QApplication 对象的槽“quit()”相连。当按钮被按下的时候,这个程序就退出了。
3、窗口布局
在本小节,我们将用一个样例来展现如何在窗口中规划各个部件的布局,并学习使用信
号和槽来使两个窗口部件同步。这个应用程序要求输入用户的年龄,使用者可以通过一个旋
转窗口或者一个滑块窗口来输入。
这个应用程序包括三个窗口部件:一个 QSpinBox,一个 QSlider 和一个 QWidget。窗口
部件 QWidget 是程序的主窗口。QSpinBox 和 QSlider 被放置在 QWidget 中;他们是 QWidget
的子窗口。当然,我们也可以说 QWidget 是 QSpinBox 和 QSlider 的父窗口。QWidget 本身
没有父窗口,因为它被当作一个顶级的窗口。QWidget 以及所有它的子类的构造函数都拥有
一个参数:QWidget *,这说明了它的父窗口。
下面是程序的代码:
1 #include <QApplication>
2 #include <QHBoxLayout>
3 #include <QSlider>
4 #include <QSpinBox>
5 int main (int argc, char *argv [])
6 {
7 QApplication app (argc, argv);
8 QWidget *window = new QWidget;
9 window->setWindowTitle ("Enter Your Age");
10 QSpinBox *spinBox = new QSpinBox;
11 QSlider *slider = new QSlider (Qt::Horizontal);
12 spinBox->setRange (0, 130);
13 slider->setRange (0, 130);
14 QObject::connect (spinBox, SIGNAL (valueChanged (int)),
15 slider, SLOT (setValue (int)));
16 QObject::connect (slider, SIGNAL (valueChanged (int)),
17 spinBox, SLOT (setValue (int)));
18 spinBox->setValue (50);
19 QHBoxLayout *layout = new QHBoxLayout;
20 layout->addWidget (spinBox);
21 layout->addWidget (slider);
22 window->setLayout (layout);
23 window->show ();
24 return app. exec ();
25 }
第 8 行 和第 9 行设 置 了 QWidget, 它 将 被作 为 程序 的 主窗 口 。我 们 调用 函 数
setWindowTitle()来设置窗口的标题栏。
第 10 行和第 11 行创建了一个 QSpinBox 和一个 QSlider,第 12 行和第 13 行设置了它们
的取值范围(我们假设用户最大也只有 130 岁)。我们可以将之前创建的 QWidget对象 window
传递给 QSpinBox 和 QSlider 的构造函数,用来说明这两个对象的父窗口,但是这么做并不
是必须的。原因是窗口布局系统将会自己指出这一点,自动将 window 设置为父窗口。我们
一会儿就可以看到这个特性。
在第 14 行和第 17 行,两个对于 QObject::connect()函数的调用确保了旋转窗口和滑块窗
口的同步,这样这两个窗口总是显示同样的数值。不管一个窗口对象的数值何时发生变化,
它的信号 valueChanged(int)就将被发射,而另一个窗口对象的槽 setValue(int)会接受到这个信
号,使得自身的数值与其相等。
第 18 行将旋转窗口的数值设置为 50。当这个事件发生的时候,QSpinBox 发射信号
valueChanged(int),这个信号包括一个值为 50 的 整型参数。这个参数被 QSlider 的槽
setValue(int)接受,就会将滑块的值也设置为 50。由于 QSlider 的值被改变,所以 QSlider 也
会发出一个 valueChanged(int)信号并触发 QSpinBox 的 setValue(int)槽。但是在这个时候,
QSpinBox 不会再发出任何信号,因为旋转窗口的值已经被设置为 50 了。这将有效地防止信
号的无限循环。
从第 19 行到第 22 行,我们通过使用一个 layout 管理器对旋转窗口和滑块窗口进行了布
局设置。一个布局管理者就是一个根据窗口作用设置其大小和位置的对象。Qt 有三个主要
的布局管理类:
QHBoxLayout:将窗口部件水平自左至右设置(有些情况下是自右向左)。
QVBoxLayout:将窗口部件垂直自上向下设置。
QGridLayout: 以网格形式设置窗口部件。
第 22 行我们调用 QWidget::setLayout()函数在对象 window 上安装布局管理器。通过这
个调用,QSpinBox 和 QSlider 自动成为布局管理器所在窗口的子窗口。现在我们明白为什
么在设置子窗口时不用显式地说明父窗口了。
可以看到,虽然没有明显地给出任何窗口的大小和位置,但 QSpinBox 和 QSlider 是很
剩余37页未读,继续阅读
资源评论
春哥111
- 粉丝: 1w+
- 资源: 5万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python的机械设计实用计算器,可计算电动机,传动装置,V带轮,齿轮,轴,轴承的几何或者力,运动学参数数值+源码+开发文档
- 基于HTML +JavaScript的元旦倒计时代码.docx
- 【Unity资源免费分享】孩子益智小游戏unity 5x系列Baby Doll House Cleaning
- 【资源免费分享】集市游戏(uniyt案例)
- 数据整理结果 2023-12-7 192544 6.dta
- 5.22前端基础(2)
- 糖尿病风险因素分析数据
- matlab项目源码基于matlab的声源定位广义互相关算法的实现.zip
- 基于Go的Dory-Engine应用上云引擎命令行客户端设计源码
- dotnet-core-uninstall-1.7.521001 github上下载下来,从github下载不下来时,可以使用这
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功