QT用少于SLOT

时间:2018-08-19 16:51:49

标签: c++ qt c++11 qt5

我有此代码:

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

myMethod 仅具有第一个参数(等于SIGNAL)但我需要传递指针lo lineEdit_1 时,此代码才能正常工作为了允许 myMethod 知道必须在哪个LineEdit上进行操作。 我该怎么办?

非常感谢。

1 个答案:

答案 0 :(得分:5)

您不必将发出信号的对象作为附加参数发送,QObject s具有sender()方法可以让我们获取该对象:

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;
    }
}

如果您需要传递其他参数,则可以使用lambda函数,但请务必花一些时间查看限制(如何使用它取决于上下文):

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