一、槽函数的基础概念
槽函数可以和信号绑定在一起,在这种情况下,每当发射这个信号的时候,就会自动调用这个槽。
槽函数本质上和普通的C++ 成员几乎是一样的-———可以是虚函数、可以被重载、可以是公有的、保护的或者是私有的,并且可以被其他C++成员函数直接调用;还有他们的参数可以是任意类型的。
二、信号
信号:来自 QML 对象的通知,就是字面意思。
三、连接connect
连接信号和槽的语句
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
这里的sender和receiver 是指向QObject的指针,signal和slot是不带参数的函数名。实际上,SIGNAL()宏和SLOT()宏会把他们的参数转换成相应的字符串。
sender :信号的发出者
SIGNAL:信号的类型
receiver:信号的接收者
SLOT:信号接收者 接收到信号所执行的动作,即槽函数
connect总结一句话,sender发出SIGNAL,receiver就会执行SLOT。
四、连接方式
1.一个信号可以连接多个槽
eg:connect(slider, SIGNAL(valueChanged(int)),
spinBox,SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)),
this,SLOT(updateStatusBarIndicator(int)));
作者意图很明显,当slider指向的对象发出信号valueChanged(int)后,他想让自己指向的对象和spinBox都响应这个信号,然后执行槽函数。不过需要注意的的是,在发射这个信号的时候,会议不确定的顺序一个接一个地调用这些槽。
2.多个信号可以来连接同一个槽
eg:connect(lcd, SIGNAL(overflow()),
this,SLOT(handleMathError(int)));
connect(lineEdit, SIGNAL(valueChanged()),
this,SLOT(handleMathError())
这回简述哈,无论发射上面哪一个信号,都会调用handleMathError()这个槽函数
3.一个信号可以和另外一个信号相连
eg: connect(lineEdit, SIGNAL(textChanged(const QString &)),
this, SIGNAL(updateStatusBarIndicator(int));
当第一个信号发出时,第二个信号也会发出。
4.连接可以被移除
disconnect(lcd, SIGNAL(overflow()),
this,SLOT(handleMathError(int)))
字面意思,删除信号和槽的连接。