bool QObject::connect(const QObject *sender, const char *signal,
const QObject *receiver, const char *method,
Qt::ConnectionType type = Qt::AutoConnection);
1.sender: 一个指向信号发送者的QObject指针。这是发出信号的对象,可以是任何继承自QObject的类的实例。
注意:一个窗口接收另一个窗口中按钮点击之后发出的信号,发出信号者是那个窗口类的实例,而不是那个按钮
2.signal: 一个以null结尾的字符串,表示信号的声明。
这个字符串应该与类中signals宏定义的信号名称完全匹配。
例如,如果你的信号声明为void mySignal();,那么这里的字符串应该是"mySignal"。
注意点:
信号可以有参数,但是没有返回值
connect函数的第二个参数是信号的声明,而不是信号的实例。这是因为信号是与类相关联的,而不是与类创建的某个特定实例相关联。
3.receiver: 一个指向槽函数接收者的QObject指针。这是将要接收信号并执行槽函数的对象。
4.method: 一个以null结尾的字符串,表示槽函数的声明。这个字符串应该与类中槽函数的名称完全匹配。
例如,如果你的槽函数声明为void mySlot();,那么这里的字符串应该是"mySlot"。
type: 一个可选参数,指定连接的类型。默认值是Qt::AutoConnection,表示Qt将根据上下文自动选择连接类型。
Qt::DirectConnection: 直接连接,信号的发射将立即调用槽函数。
Qt::QueuedConnection: 排队连接,信号的发射将导致槽函数在一个单独的事件循环中被调用。
Qt::BlockingQueuedConnection: 阻塞排队连接,类似于QueuedConnection,但发射信号的线程将等待槽函数完成执行。
在Widget窗口中有一个按钮,点击按钮之后创建一个Form窗口,这个窗口中有一个按钮,点击之后会发出一个updateButtonSignal信号
Widget
void Widget::on_pushButton_clicked()
{
Form *f = new Form(); 确保Form是Widget的子窗口
f->show();
//this->close();
connect(f,&Form::updateButtonSignal,this,&Widget::test);
}
Form.cpp
void Form::on_pushButton_clicked()
{
// close();
// Widget *w = new Widget();
// w->show();
qDebug()<<"123";
emit updateButtonSignal();
}
在Form.h中声明这个信号
signals:
void updateButtonSignal();