QT5 带参数的信号与槽

mac2025-08-30  15

QT中信号与槽有两种连接方式

connect(_comboBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(slotComboChange(QString))); connect(submitBtn,&QPushButton::clicked,this,&TCPClient::SoltsubmitBtn);

1.不带参数

不带参数的信号以及参数没有重载的情况下可以直接connect

connect(submitBtn,&QPushButton::clicked,this,&TCPClient::SoltsubmitBtn);

2.参数有重载的信号与槽

带参数的lanbda

connect(ui->customTitleBarWgt,&customTitleBar::setDone,this,[](QString ip){ qDebug()<<"ip:"<<ip; }); connect(_comboBox,static_cast<void (QComboBox::*)(const QString &index)>(&QComboBox::currentIndexChanged),this, &ChooseInterface::slotComboChange); typedef void (QTcpSocket::*error1)( QAbstractSocket::SocketError); connect(_socket, static_cast<error1>(&QTcpSocket::error),this ,&TCPServe::slotError); //error1为函数新名,error为待connect的函数,QAbstractSocket::SocketError为参数 connect(_socket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)>(&QTcpSocket::error),this ,&TCPServe::slotError);

3.QT4/5两种connect方式

// 传统Qt4连接方式为 信号发送者,信号,信号接受者,处理函数 QObject::connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(qT4_slot())); //Qt5连接方式 //其实这么写的方式和Qt4没有啥却别,只是在Qt4 中引用了信号槽,在简单的使用时没有问题,但是在庞大的工程中,信号和曹 仅仅是宏替换,在编译的时候没有安全监测 //Qt5的新方法,在编译的时候就会有监测,如果我们手误操作失误,就会出现问题 QObject::connect(ui->pushButton_2,&QPushButton::clicked,this,&Widget::qT5_slot); //Qt5 Lambda表达式 //这里需要注意 Lambda表达式是C++ 11 的内容,所以,需要再Pro项目文件中加入 CONFIG += C++ 11 QObject::connect(ui->pushButton_3,&QPushButton::clicked,[=](){qDebug()<<"lambda 表达式";});
最新回复(0)