• 重点:QObject 的拷贝构造和赋值操作——私有


    QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域。因此所有继承自QObject的类都使用这个宏声明了他们的拷贝构造函数和赋值操作符为私有。

    为什么要这样做?

    我 们都知道Qt对标准C++增加了一些功能:signals, slots, object properties, events, event filters, string translation, timers,object trees, guarded pointers, dynamic cast.

    新加入的这些功能就要求我们把每一个QObject的对象看做是唯一(identities)的。唯一的意思就是不能通过拷贝或者赋值操作

    制作出一个一模一样的复制体。

    试 想如果我们有一个QPushButton对象btnSubmit,如果我们可以复制出一个和btnSubmint完全一样的button对象,那么新的 button对象的名字应该是什么?如果也叫btnSubmit,当我们给其中的btnSubmit接收事件或发出信号时,系统如何区分把事件由哪个 button对象接收,或者哪个对象发送了信号?

    我们知道在各种容器中能以value方式存放的类型,必须有默认的构造函数,拷贝构造函数和赋值操作。由于QObject及所有继承自它的子类都没 有提供拷贝构造和赋值操作,当我们使用QList<QObject>时,编译器就会报错。如果我们要在容器中存储这中类型的对象,我们就要使 用它们的指针。如QList<QObject *>

    转自:http://wan-2004.iteye.com/blog/1134186

  • 相关阅读:
    CUDA中修饰符的解释
    [C] zintrin.h : 智能引入intrinsic函数。支持VC、GCC,兼容Windows、Linux、Mac OS X
    GPU优化方法[转]
    Angularjs实例2
    Angularjs实例1
    Services 在多个 controller 中共享数据。
    自定义AngularJS中的services服务
    AngularJS web应用程序
    AngularJS 表单
    在文件中的AngularJS模块
  • 原文地址:https://www.cnblogs.com/liushui-sky/p/6559416.html
Copyright © 2020-2023  润新知