条件
- 继承自Qobject
- 定义了宏Q_OBJECT
信号和槽
当某个实例化的对象上产生事件时,该实例化对象就会发出特定的信号。
信号的本质就是函数,并且是只需声明,无需实现的函数
以QPushButton为例
- 标准信号
class Q_WIDGETS_EXPORT QAbstractButton : public QWidget
{
Q_SIGNALS:
void pressed();
void released();
void clicked(bool checked = false);
void toggled(bool checked);
}
- 标准槽
class Q_WIDGETS_EXPORT QAbstractButton : public QWidget
{
public Q_SLOTS:
// Widget management functions
virtual void setVisible(bool visible);
void setHidden(bool hidden);
void show();
void hide();
void showMinimized();
void showMaximized();
void showFullScreen();
void showNormal();
bool close();
void raise();
void lower();
}
- 自定义信号
//在自定义类内声名并实现
signals:
void mySigal();
void mySigal2(QString& msg);
- 自定义槽
public slots:
void mySlot();
void mySlot2(QString& msg);
信号连接槽
- connect
- 转为槽函数
扩展
- 连接重载的信号和槽
//有参重载传递
//指定类型
void (Commander::*pCommanderGoWithParamter)(QString&) = &Commander::go;
void (Soldier::*pSoldierFightWithParamter)(QString&) = &Soldier::fight;
connect(&com, pCommanderGoWithParamter, &sol, pSoldierFightWithParamter);
- 多个信号、多个槽之间可以相互连接