Qt 技术探索之一 Qt 官方 demo 之 Image Composition Example(图片合成)

               

Qt 图片合成例子

源码下载
        本文取材自 Qt4.5 的官网 Qt Examples -> Painting -> Image Composition。本 demo 主要演示了在 Qt 中是如何选用合成模型将不同的图片合成在一起的。通过本 demo ,我们可以掌握 Qt 中拼接图片、合成图片、组合图片、制造图片以及给图片换背景等实际开发中需要的图片处理技术。
        在学习本 demo 之前,我们先来回顾一下 signal 和 slot 的相关内容。

        signal 和 slot 的基本知识
        信号和槽是用来在对象间通讯的方法,当一个特定事件发生的时候,signal 会被发出,slot 调用是用来响应相应的 signal 的。
        Qt 对象已经含了许多预定义的 signal,但我们总是可以在派生类中添加新的 signal。Qt 对象中也已经包含了许多预定义的 slot,但我们可以在派生类中添加新的 slot 来处理我们感兴趣的 signal。
        signal 和 slot 机制是类型安全的,signal 和 slot 必须互相匹配(实际上,一个slot 的参数可以比对应的 signal 的参数少,因为它可以忽略多余的参数)。signal 和 slot 是松散的配对关系,发出 signal 的对象不关心是那个对象链接了这个 signa包l,也不关心是那个或者有多少 slot 链接到了这个  signal。Qt 的 signal 和 slot 机制保证了:如果一个 signal 和 slot 相链接,slot 会在正确的时机被调用,并且是使用正确的参数。signal 和 slot 都可以携带任何数量和类型的参数,他们都是类型安全的。
        所有从 QObject 直接或者间接继承出来的类都能包含信号和槽,当一个对象的状态发生变化的时候,信号就可以被 emit 出来,这可能是某个其它的对象所关心的。这个对象并不关心有哪个对象或者多少个对象链接到这个信号了,这是真实的信息封装,它保证了这个对象可以作为一个软件组件来被使用。
        槽( slot )是用来接收信号的,但同时他们也是一个普通的类成员函数,就象一个对象不关心有多少个槽链接到了它的某个信号,一个对象也不关心一个槽链接了多少个信号。这保证了用 Qt 创建的对象是一个真实的独立的软件组件。
        一个信号可以链接到多个槽,一个槽也可以链接多个信号。同时,一个信号也可以链接到另外一个信号。
        所有使用了信号和槽的类都必须包含 Q_OBJECT 宏,而且这个类必须从 QObject 类派生(直接或者间接派生)出来。
        当一个 signal 被 emit 出来的时候,链接到这个 signal 的 slot 会立刻被调用,就好像是一个函数调用一样。当这件事情发生的时候,signal 和 slot 机制与 GUI 的事件循环完全没有关系,当所有链接到这个 signal 的 slot 执行完成之后,在 emit 代码行之后的代码会立刻被执行。当有多个 slot 链接到一个 signal 的时候,这些 slot 会一个接着一个的、以随机的顺序被执行。
        signal 代码会由 moc(Meta-Object Compiler,元对象编译器,是处理 Qt 的 C++ 扩展的程序)自动生成,开发人员一定不能在自己的 C++ 代码中实现它,并且,它永远都不能有返回值。
        slot 其实就是一个普通的类函数,并且可以被直接调用,唯一特殊的地方是它可以与signal相链接。
        C++ 的预处理器更改或者删除 signal,slot,emit 关键字,所以,对于 C++ 编译器来说,它处理的是标准的 C++ 源文件。

        复习完 signal 和 slot 的基本知识之后,我们开始按照官网介绍一步步创建 demo。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值