模拟Qt中 信号和槽,在传递信号过程中的4种情况
对象1 : 我
class Me : public QOject
{
Q_OBJECT
public:
Me(QObject *parent = 0);
~Me();
signals:
void seeBeauty();//看到美女
void molestBeauty();//调戏美女
void writeLoveLetter(QString text);//写情书
void weituoLoveLetter(QString text);//委托
public slots:
void mouthWatering(); //流口水
}
对象2 : 美女
class Beauty : public QOject
{
Q_OBJECT
public:
Beauty();
~Beauty();
signals:
void sendLetter(QString text);
public slots:
void mouthWatering(); //流口水
void beatSombody();//抽人
void answer();//回复-拒绝
void answer(QString text);//回复-同意
}
//实例化对象
Me wo; //我
Beauty sweet; //小红
Beauty sweet1; //小紫色
//模拟信号和槽在传递信号过程中的4种情况
场景:
1.我 看到 美女 之后,我直流口水 //自己给自己发信号
connect(&wo,&Me::seeBeauty,&wo,&Me::mouthWatering);
2.我 调戏 美女,美女抽我 //我发信号,其他人接手
connect(&wo,&Me::molestBeauty,&sweet,&sweet,&Beauty::beatSombody);
3.我给两个美女写情书,一个同意,一个拒绝 //槽函数的参数个数 < 信号的参数个数
//1.信号和槽重载时候,需要使用函数指针
//2.同一个信号可以,链接多个槽函数
void(Beauty:* slotAnwer)() = &Beauty::answer;
connect(&wo,&Me::writeLoveLetter,&sweet,slotAnwer);
void(Beauty:* slotAnwer1)() = &Beauty::answer;
connect(&wo,&Me::writeLoveLetter,&sweet1,slotAnwer1);
4.我委托小红把情书交给她的双胞胎妹妹小紫,小紫说我只喜欢会Qt的程序猿
//信号链接信号
//发出信号
connect(&wo,&Me::weituoLoveLetter,&sweet1,&Beauty::sendLetter);
//指定谁来处理小红的信号
connect(&sweet1,&Beauty::sendLetter,&sweet,&Beauty::slotAnwer1);