Qt4 信号与槽
信号与槽关联是用 QObject::connect() 函数实现的,其基本格式是:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
connect() 是 QObject 类的一个静态函数,而 QObject 是所有 Qt 类的基类,在实际调用时可以忽略前面的限定符,所以可以直接写为:
connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
//信号和槽无参数时,也要加括号;有参数传递时,可以只填数据类型。
connect(&subw,SIGNAL(mySignal()),this,SLOT(executeSlot()));
connect(&subw,SIGNAL(mySignal(int,QString)),this,SLOT(executeSlot2(int,QString)));
Qt5 信号与槽
//qt5,当信号函数无重载时,可以使用函数指针形式关联,而且无需出现函数参数。
//connect(&subw,&subWiget::mySignal,this,&MainWindow::executeSlot);
//qt5 pro文件中 加 CONFIG+=C++11,Lambad 表达式
QPushButton *b3 = new QPushButton(this);
b3->setText(“Lambad 表达式”);
b3->move(150,10);
connect(b3,&QPushButton::released,
b3 mutable
{
b3->setText(“通过匿名表达式修改了内容”);
qDebug()<<“触发了匿名槽函数,pro文件中要加 CONFIG+=C++11”;
});
Qt::ConnectionType type
Constant | Description |
---|---|
Qt::AutoConnection | 自动连接:(默认值)如果信号在接收者所依附的线程内发射,则等同于直接连接。如果发射信号的线程和接受者所依附的线程不同,则等同于队列连接 |
Qt::DirectConnection | 直接连接:当信号发射时,槽函数将直接被调用。无论槽函数所属对象在哪个线程,槽函数都在发射信号的线程内执行。 |
Qt::QueuedConnection | 队列连接:当控制权回到接受者所依附线程的事件循环时,槽函数被调用。槽函数在接收者所依附线程执行。也就是说:这种方式既可以在线程内传递消息,也可以跨线程传递消息 |
Qt::BlockingQueuedConnection | 与Qt::QueuedConnection类似,但是会阻塞等到关联的slot都被执行。这里出现了阻塞这个词,说明它是专门用来多线程间传递消息的 |