没有合适的资源?快使用搜索试试~ 我知道了~
首页Qt5中文开发指南:跨平台GUI框架详解
Qt5中文开发指南:跨平台GUI框架详解
需积分: 1 1 下载量 165 浏览量
更新于2024-06-17
收藏 2.39MB DOCX 举报
Qt中文版开发维护帮助文档详细介绍了Qt这一强大的跨平台C++图形用户界面应用程序框架。Qt自1991年由奇趣科技创立以来,经历了多次所有权变动,如1996年进入商业领域并成为KDE基础,再到2008年被诺基亚收购,直到2012年被Digia接手。这个过程中,Qt不断发展壮大,于2014年推出了QtCreator 3.1.0集成开发环境,并支持了iOS、Android和Windows Phone等主流移动平台。 Qt的核心特性包括其面向对象的设计,使得组件化编程变得简单易行,这极大地提高了开发者的效率。它覆盖了广泛的平台,如Windows系列(包括老旧到最新操作系统)、Linux的各种变种,包括X11和嵌入式Linux,还有MacOSX和嵌入式设备如Windows CE。Qt支持两种版本:商业版和开源的LGPL版本。商业版为付费用户提供专业服务,包括技术支持和免费升级;而LGPL版本则面向开源社区,功能与商业版相当,但在GNU通用公共许可证下免费提供。 对于想要在不同平台上使用Qt的开发者,文档提供了详细的安装指南,包括针对Linux、MacOSX和Windows(VS2013版本)的预编译二进制包,以及针对Android的特定版本。无论是初学者还是经验丰富的开发者,这份文档都是学习和优化Qt项目的重要参考资料,涵盖了从入门到深入使用的方方面面。 Qt中文版开发维护帮助文档为开发者提供了一个完整的工具集,从框架介绍、历史沿革、技术特性到安装配置,旨在帮助用户高效地构建跨平台的高质量图形界面应用程序。无论是在商业环境还是开源项目中,Qt都扮演着不可或缺的角色,是现代软件开发中一个强大的技术支撑。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/88785664/bg10.jpg)
signals:
void newPaper(const QString &name);
private:
QString m_name;
};
////////// reader.h //////////
#include <QObject>
#include <QDebug>
class Reader : public QObject
{
Q_OBJECT
public:
Reader() {}
void receiveNewspaper(const QString & name)
{
qDebug() << "Receives Newspaper: " << name;
}
};
////////// main.cpp //////////
#include <QCoreApplication>
#include "newspaper.h"
#include "reader.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
Newspaper newspaper("Newspaper A");
Reader reader;
QObject::connect(&newspaper, &Newspaper::newPaper,
&reader, &Reader::receiveNewspaper);
newspaper.send();
![](https://csdnimg.cn/release/download_crawler_static/88785664/bg11.jpg)
return app.exec();
}
首先看 Newspaper 这个类。这个类继承了 QObject 类。只有继承了 QObject
类的类,才具有信号槽的能力。所以,为了使用信号槽,必须继承 QObject。
凡是 QObject 类(不管是直接子类还是间接子类),都应该在第一行代码写
上 Q_OBJECT。不管是不是使用信号槽,都应该添加这个宏。这个宏的展开将
为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI
的反射能力。
Newspaper 类的 public 和 private 代码块都比较简单,只不过它新加了一
个 signals。signals 块所列出的,就是该类的信号。信号就是一个个的函
数名,返回值是 void(因为无法获得信号的返回值,所以也就无需返回任
何值),参数是该类需要让外界知道的数据。信号作为函数名,不需要在 cpp
函数中添加任何实现。
Newspaper 类 的 send() 函 数 比 较 简 单 , 只 有 一 个 语 句 emit
newPaper(m_name);。emit 是 Qt 对 C++ 的扩展,是一个关键字(其实也
是一个宏)。emit 的含义是发出,也就是发出 newPaper()信号。感兴趣的接
收者会关注这个信号,可能还需要知道是哪份报纸发出的信号?所以,我们
将实际的报纸名字 m_name 当做参数传给这个信号。当接收者连接这个信号
时,就可以通过槽函数获得实际值。这样就完成了数据从发出者到接收者的
一个转移。
Reader 类 更 简单 。 因 为 这 个类 需 要 接 受信 号, 所 以 我 们将 其继 承 了
QObject,并且添加了 Q_OBJECT 宏。后面则是默认构造函数和一个普通的成
员函数。Qt 5 中,任何成员函数、static 函数、全局函数和 Lambda 表达
式都可以作为槽函数。与信号函数不同,槽函数必须自己完成实现代码。槽
函数就是普通的成员函数,因此作为成员函数,也会受到 public、private
等访问控制符的影响。(如果信号是 private 的,这个信号就不能在类的外
面连接,也就没有任何意义。)
![](https://csdnimg.cn/release/download_crawler_static/88785664/bg12.jpg)
自定义信号槽需要注意的事项
发送者和接收者都需要是 QObject 的子类(当然,槽函数是全局函数、Lambda
表达式等无需接收者的时候除外);
使用 signals 标记信号函数,信号是一个函数声明,返回 void,不需要实
现函数代码;
槽函数是普通的成员函数,作为成员函数,会受到 public、private、
protected 的影响;
使用 emit 在恰当的位置发送信号;
使用 QObject::connect()函数连接信号和槽。
任何成员函数、static 函数、全局函数和 Lambda 表达式都可以作为槽函
数
信号槽的更多用法
一个信号可以和多个槽相连
如果是这种情况,这些槽会一个接一个的被调用,但是它们的调用顺序
是不确定的。
多个信号可以连接到一个槽
只要任意一个信号发出,这个槽就会被调用。
一个信号可以连接到另外的一个信号
当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形
式和信号-槽的形式没有什么区别。
槽可以被取消链接
这种情况并不经常出现,因为当一个对象 delete 之后,Qt 自动取消所有连
接到这个对象上面的槽。
使用 Lambda 表达式
在使用 Qt 5 的时候,能够支持 Qt 5 的编译器都是支持 Lambda 表达式的。
我们的代码可以写成下面这样:
![](https://csdnimg.cn/release/download_crawler_static/88785664/bg13.jpg)
QObject::connect(&newspaper, static_cast<void (Newspaper:: *)
(const QString &)>(&Newspaper::newPaper),
[=](const QString &name)
{ /* Your code here. */ }
);
在连接信号和槽的时候,槽函数可以使用 Lambda 表达式的方式进行处理。
3.3 Lambda 表达式
C++11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。
首先看一下 Lambda 表达式的基本构成:
[函数对象参数](操作符重载函数参数)mutable 或 exception ->返回值{函数体}
① 函数对象参数;
[],标识一个 Lambda 的开始,这部分必须存在,不能省略。函数对象参数
是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使
用那些到定义 Lambda 为止时 Lambda 所在作用范围内可见的局部变量(包括
Lambda 所在类的 this)。函数对象参数有以下形式:
空。没有使用任何函数对象参数。
=。函数体内可以使用 Lambda 所在作用范围内所有可见的局部变量(包
括 Lambda 所在类的 this),并且是值传递方式(相当于编译器自动为我
们按值传递了所有局部变量)。
&。函数体内可以使用 Lambda 所在作用范围内所有可见的局部变量(包
括 Lambda 所在类的 this),并且是引用传递方式(相当于编译器自动为
我们按引用传递了所有局部变量)。
![](https://csdnimg.cn/release/download_crawler_static/88785664/bg14.jpg)
this。函数体内可以使用 Lambda 所在类中的成员变量。
a。将 a 按值进行传递。按值进行传递时,函数体内不能修改传递进来的
a 的拷贝,因为默认情况下函数是 const 的。要修改传递进来的 a 的拷
贝,可以添加 mutable 修饰符。
&a。将 a 按引用进行传递。
a, &b。将 a 按值进行传递,b 按引用进行传递。
=,&a, &b。除 a 和 b 按引用进行传递外,其他参数都按值进行传递。
&, a, b。除 a 和 b 按值进行传递外,其他参数都按引用进行传递。
int m = 0, n = 0;
[=] (int a) mutable { m = ++n + a; }(4);
[&] (int a) { m = ++n + a; }(4);
[=,&m] (int a) mutable { m = ++n + a; }(4);
[&,m] (int a) mutable { m = ++n + a; }(4);
[m,n] (int a) mutable { m = ++n + a; }(4);
[&m,&n] (int a) { m = ++n + a; }(4);
② 操作符重载函数参数;
标识重载的()操作符的参数,没有参数时,这部分可以省略。参数可以通过
按值(如:(a,b))和按引用(如:(&a,&b))两种方式进行传递。
③ 可修改标示符;
mutable 声明,这部分可以省略。按值传递函数对象参数时,加上 mutable
修饰符后,可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本
身)。
④ 错误抛出标示符;
exception 声明,这部分也可以省略。exception 声明用于指定函数抛出的
异常,如抛出整数类型的异常,可以使用 throw(int)
⑤ 函数返回值;
->返回值类型,标识函数返回值的类型,当返回值为 void,或者函数体中只
有一处 return 的地方(此时编译器可以自动推断出返回值类型)时,这部
分可以省略。
⑥ 是函数体;
剩余107页未读,继续阅读
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/090865b4f0db4897a8433dcf60dd39fd_wanderfullyll.jpg!1)
wanderfullyll
- 粉丝: 21
- 资源: 3
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 京瓷TASKalfa系列维修手册:安全与操作指南
- 小波变换在视频压缩中的应用
- Microsoft OfficeXP详解:WordXP、ExcelXP和PowerPointXP
- 雀巢在线媒介投放策划:门户网站与广告效果分析
- 用友NC-V56供应链功能升级详解(84页)
- 计算机病毒与防御策略探索
- 企业网NAT技术实践:2022年部署互联网出口策略
- 软件测试面试必备:概念、原则与常见问题解析
- 2022年Windows IIS服务器内外网配置详解与Serv-U FTP服务器安装
- 中国联通:企业级ICT转型与创新实践
- C#图形图像编程深入解析:GDI+与多媒体应用
- Xilinx AXI Interconnect v2.1用户指南
- DIY编程电缆全攻略:接口类型与自制指南
- 电脑维护与硬盘数据恢复指南
- 计算机网络技术专业剖析:人才培养与改革
- 量化多因子指数增强策略:微观视角的实证分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)