槽函式本質是普通 C++ 成員函式,可 virtual、可重寫、任意存取權限、可被直接呼叫、參數任意類型。唯一差別:可與信號連接,信號觸發時自動回呼。
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
sender/receiver 為 QObject*,SIGNAL()/SLOT() 宏將函式簽名轉字串。
disconnect(),物件銷毀時自動解除connect() 定義在 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); // 發出信號
}
}
if 判斷避免循環連接導致無限遞迴。信號槽不限於 GUI,可用於任意 QObject 子類別。