简体   繁体   中英

QT connect a SIGNAL with fewer arguments than SLOT

I have this code:

QObject::connect(lineEdit_1, SIGNAL(textChanged(const QString &)), MainWindow, SLOT(myMethod(const QString &, QLineEdit* )) );

This code works correctly when myMethod has only the first argument (equal to the SIGNAL) but I need to pass a pointer lo lineEdit_1 in order to allow myMethod to know on which LineEdit it has to operate. What I should to do?

Thanks a lot.

It is not necessary that you send as an additional argument the object that emits the signal for it, the QObject s have the sender() method that allows us to obtain that object:

QObject::connect(lineEdit_1, &QLineEdit::textChanged, MainWindow, &Your_Class::myMethod);

void Your_Class::MyMethod(const QString & text){
    if(QLineEdit *le = qobject_cast<QLineEdit *>(sender())){
        qDebug() << le;
    }
}

If you need to pass other arguments you can use the lambda functions but always take the time to see the limitations (how to use it depends on the context):

QObject::connect(lineEdit_1, &QLineEdit::textChanged, [ /* & or = */](const QString & text){
    MainWindow->MyMethod(text, another_arguments);
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM