Класс QSignalMapper
устарел, и вы должны использовать новый синтаксис сигнала / слотов с лямбда-функцией:
connect(ui->step2, &QLineEdit::returnPressed, [=]() { this->on_steps_returnPressed(ui->step2); });
Вы также можете передавать только текст внутри вас QLineEdit
вместо указателяна нем:
connect(ui->step2, &QLineEdit::returnPressed, [=]() { this->on_steps_returnPressed(ui->step2->text()); });
Если вы все равно должны использовать QSignalMapper
, вы должны использовать сигнал QSignalMapper::mapped(QWidget*)
.Поскольку слот должен иметь ту же сигнатуру, что и подключенный сигнал, on_steps_returnPressed
становится on_steps_returnPressed(QWidget*)
(приведите параметр к QLineEdit
):
QSignalMapper* maper = new QSignalMapper (this) ;
connect(step2, SIGNAL(returnPressed()), maper, SLOT(map()));
maper->setMapping(step2, step2);
connect(maper, SIGNAL(mapped(QWidget*)), this, SLOT(on_steps_returnPressed(QWidget*)));
Ваш слот должен быть примерно таким:
void on_steps_returnPressed(QWidget* widget)
{
QLineEdit* edit = qobject_cast<QLineEdit*>(widget);
if (!edit)
return;
label->setText(edit->text());
}
Полный пример для сравнения двух решений:
class Widget: public QWidget
{
Q_OBJECT
public:
Widget(QWidget* parent=nullptr): QWidget(parent),
lineEdit1(new QLineEdit(this)),
lineEdit2(new QLineEdit(this)),
label(new QLabel(this))
{
QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(lineEdit1);
layout->addWidget(lineEdit2);
layout->addWidget(label);
connect(lineEdit1, &QLineEdit::returnPressed, [=]() { this->on_steps_returnPressed(lineEdit1); });
QSignalMapper* maper = new QSignalMapper (this) ;
connect(lineEdit2, SIGNAL(returnPressed()), maper, SLOT(map()));
maper->setMapping(lineEdit2, lineEdit2);
connect(maper, SIGNAL(mapped(QWidget*)), this, SLOT(on_steps_returnPressed(QWidget*)));
}
public slots:
void on_steps_returnPressed(QLineEdit* edit)
{
label->setText(edit->text());
}
void on_steps_returnPressed(QWidget* widget)
{
QLineEdit* edit = qobject_cast<QLineEdit*>(widget);
if (!edit)
return;
label->setText(edit->text());
}
private:
QLineEdit* lineEdit1;
QLineEdit* lineEdit2;
QLabel* label;
};