zoukankan      html  css  js  c++  java
  • QT信号与槽机制需要注意的问题

    1、信号与槽的效率是非常高的,但是同真正的回调函数比较起来,由于增加了灵活性,因此在速度上还是有所损失。当然这种损失相对来说是比较小的,但是要追求高效率的话,比如实时系统,就要尽可能避免。

    2、信号与槽机制与普通函数的调用一样,如果使用不当的话,在程序执行时也可能产生死循环。因此,在定义槽函数时一定要注意避免间接形成无限循环,即在槽中再次发送所接收到的同样信号,防止死循环。

    3、如果一个信号与多个槽相联系的话,那么,当这个信号被发射时,与之相关的槽被激活的顺序将是随机的。

    4、宏定义不能用在signal和slot的参数中。既然moc工具不扩展#define,因此,在signals和slots中携带的宏就不能正确的工作,因此不带参数是可以的。比如:

      #define a(x) x

      signals:

        void someSignal(a(x))-------------------错的

    5、构造函数不能用在signals或者slots声明区域。比如

      class A:public QObject{

        Q_OBJECT

        public slots:

          A(QObject *parent,const char *name);----------不合法

      };

    6、函数指针不能作为信号或者槽的参数,但是可以试试绕过这个限制。比如:

      class A:public QObject{

        Q_OBJECT

        public slots:

          void apply(void(*applyFunction)(QList*,void*),char*);----------------不合法

      };

      但是:

      typedef void(*ApplyFunctionType)(QList*,void*);

      class A:public QObject{

        Q_OBJECT

        public slots:

          void apply(applyFunctionType,char*);------------------------------------可以

      };

    7、信号与槽的绑定发生在运行时刻,不能有缺省参数。

    8、也不能携带模板类参数,即使moc不报错,也可能达不到预期效果(也可以用typedef绕过这个问题)。

    9、嵌套类不能位于信号或者槽区域内,也不能有信号或者槽。

    10、友元声明不能位于信号或者槽声明区域内。他们应该在普通C++的private,protected,或者public区域内声明。

  • 相关阅读:
    springmvc控制器controller单例问题
    用java求一个整数各位数字之和
    Java实现对List去重
    Oracle 11g修改字符集AL32UTF8为ZHS16GBK
    数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的
    第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?
    用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。
    tomcat和jboss的区别
    poj_2486 动态规划
    poj_1464 动态规划
  • 原文地址:https://www.cnblogs.com/JohannaFeng/p/4720459.html
Copyright © 2011-2022 走看看