美文网首页
深入介绍信号和槽

深入介绍信号和槽

作者: 诸事圆成 | 来源:发表于2018-08-02 18:56 被阅读0次

    1.槽和普通的C++成员函数差不多——虚函数|重载|public|private|被其他函数调用|参数是任意的。
    唯一的不同:槽可以和信号连接在一起

    connect(sender,SIGNAL(signal),receiver,SLOT(slot));
    //sender;receive是指向QObject的。

    1)一个信号可以连接多个槽

    connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int));
    connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updateStatusBarIndicator(int)));
    //在发射这个信号的时候,会以不确定顺序一个接一个的调用这些槽

    1. 多个信号可以连接同一个槽

    connect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError()));
    connect(calcluator,SIGNAL(divisionByZero()),this,SLOT(handleMathError()));
    //无论发射那个信号,都会调用这个槽

    3)一个信号可以和另一个信号连接

    connect(lineEdit,SIGNAL(textChanged(const QString&)),this,SIGNAL(updateRecord(const QString&)));
    当发射第一个信号时,也会发射第二个信号

    4)连接可以被移除
    disconnect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError()));
    这种情况用到很少
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    2.要把信号成功连到槽(或者另一个信号),它们的参数必须具有相同的顺序和相同的类型。

    connect(ftp,SIGNAL(rawCommandReply(int,const QString&)),this,SLOT(processReply(int,const QString &)));

    列外--如果信号的参数比槽多,多余的参数会被忽略

    connect(ftp,SIGNAL(rawCmmandReply(int,const QString&)),this,SLOT(checkErrorCode(int)));

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    我们仅仅在窗口部件之间使用了信号和槽。但是这种机制本身是在QObject中实现的,并不只局限于图形用户界面编程中。这种机制可以用于任何QObject的子类中:

    class Employee:public QObject
    {
          Q_OBJECT
      public:
          Employee(){mySalary = 0;}
          int salary()const {return mySalary;}
      public slots:
          void setSalary(int newSalary);
      signals:
          void salaryChanged(int newSalary);
      private:
          int mySalary;
    
    };
    void Employee::setSalary(int newSalary)
    {
            if(newSalary != mySalary){
                     mySalary =  newSalary;
                     emit salaryChanged(mySalary);
             }
    }
    

    相关文章

      网友评论

          本文标题:深入介绍信号和槽

          本文链接:https://www.haomeiwen.com/subject/bqvsvftx.html