dayone
connect:4种用法
注意点:
(1)每个QT变量都可以接收信号,但需要指定某一变量来处理。
(2)信号与槽都可以自定义函数,但是信号不需要实现,槽函数需要实现。
(3)QT中定义指针需要指定指针类型,如(Beauty:*slotAnwer)(QString),(QString)是参数类型,可以有重载函数的多个不同参数。
(4)如果 &QPushButton::clicked对应的槽函数带参,那么槽函数参数需要是bool类型,因为clicked参数为bool类型,需要一一对应。
一个信号包含两个函数,这两个函数可以作为两个connect信号发出者,执行相对应槽函数。
相应的一个槽函数也可使用Lambda函数来定义信号槽的回调函数,执行多个任务
例如:
void SubWidget::mySlot()
{
emit sigSub();
emit sigSub(250, "你是二百五!!!");
}
connect(&subW,&SubWidget::sigSub,this,&MainWidget::slotShowMe);
connect(&subW,&SubWidget::sigSub, this, &MainWidget::slotSubMsg);
//错误 SubWidget名字重复,解决办法:1.换函数名字
//2.定义一个新指针指向不同重载信号,但需要指定该信号属于哪一类,所以指定指针类型
// 定义该指针属于SubWidget这个类,信号返回值为void
void (SubWidget :: * MySigSub)() = &SubWidget::sigSub;
connect(&subW, MySigSub,this,&MainWidget::slotShowMe);
void (SubWidget::* MySigPlus)(int,QString) = &SubWidget::sigSub;
connect(&subW,MySigPlus, this, &MainWidget::slotSubMsg);
connect(b1, &QPushButton::clicked, this, [=]()
{
b2->setText("Lambda表达式!!!");
b3->hide();
});