QT之消息响应

来源:互联网 发布:mac如何关闭开机声音 编辑:程序博客网 时间:2024/05/18 17:44
 

//参数说明

connect( 发射信号对象指针 , SIGNAL(发射信号的控件名(信号函数参数) , 接收信号对象指针,SLOT(接收信号控件名(信号参数))

例如: connect(findLine,SIGNAL(textChanged(QString)),this,SLOT(findFile(const QString &)));

一个信号可以连多槽

例如:

connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)),  this, SLOT(updateStatusBarIndicator(int)));

slider即滑动控件当他的值变化时,valueChanged(int),发出的信号被两个槽接受spinBox ,this(当前类)。

信号和信号,槽和槽,槽和信号,他们之间是可以相互响应的。其实信号与槽的信息交换都是以函数实现的。connect()函数其实是在QObject中实现的,并不局限于GUI,只要我们继承了QOject类,就可以应用信号槽机制。

例如:

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);
        }
}

 

这样,当setSalary()调用的时候,就会发出salaryChanged()信号。

注意:

      1:connect是QObject的静态函数,在类外以QObject::connect( ...)形式调用

      2:为了正确的连接信号槽,信号和槽的参数个数、类型以及出现的顺序都必须相同。

       这里有一种例外情况,如果信号的参数多于槽的参数,那么这个参数之后的那些参数都会被忽略掉

原创粉丝点击