Мне нужно что бы несколько объектов вызывали один слот, и можно было понять, какой объект вызвал слот. В данном примере я попробовал использовать QSignalMapper
. Но он работает только со строками и с числами. Объекты у меня не получилось передать. И тк QSignalMapper
отмечен как QT_DEPRECATED
, хочу от него избавиться.
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QSignalMapper>
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
public slots:
void le(const QString &num);
private:
Ui::Widget *ui;
QSignalMapper *signalMapper;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget),
signalMapper(new QSignalMapper(this))
{
ui->setupUi(this);
ui->lineEdit_1->setPlaceholderText("#1");
ui->lineEdit_2->setPlaceholderText("#2");
ui->lineEdit_3->setPlaceholderText("#3");
connect(ui->lineEdit_1, &QLineEdit::returnPressed, signalMapper, QOverload<>::of(&QSignalMapper::map));
signalMapper->setMapping(ui->lineEdit_1, ui->lineEdit_1);
connect(ui->lineEdit_2, &QLineEdit::returnPressed, signalMapper, QOverload<>::of(&QSignalMapper::map));
signalMapper->setMapping(ui->lineEdit_2, ui->lineEdit_2);
connect(ui->lineEdit_3, &QLineEdit::returnPressed, signalMapper, QOverload<>::of(&QSignalMapper::map));
signalMapper->setMapping(ui->lineEdit_3, ui->lineEdit_3);
connect(signalMapper, QOverload<QObject *>::of(&QSignalMapper::mapped), this, &Widget::le);
}
Widget::~Widget()
{
delete signalMapper;
delete ui;
}
void Widget::le(QObject *num)
{
QLineEdit *le = dynamic_cast<QLineEdit*>(num);
if (le) {
le->setReadOnly(true);
ui->textBrowser->append(le->text());
}
}
Оказывается "Qt предоставляет функцию Qobject::sender(), которая возвращает указатель на объект, пославший сигнал."
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QSignalMapper>
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
public slots:
void lele();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->lineEdit_1->setPlaceholderText("#1");
ui->lineEdit_2->setPlaceholderText("#2");
ui->lineEdit_3->setPlaceholderText("#3");
connect(ui->lineEdit_1, &QLineEdit::returnPressed, this, &Widget::lele);
connect(ui->lineEdit_2, &QLineEdit::returnPressed, this, &Widget::lele);
connect(ui->lineEdit_3, &QLineEdit::returnPressed, this, &Widget::lele);
}
Widget::~Widget()
{
delete ui;
}
void Widget::lele()
{
QLineEdit *le = dynamic_cast<QLineEdit *>(sender());
if (le) {
ui->textBrowser->append(le->text());
le->setReadOnly(true);
} else {
ui->textBrowser->append("false");
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я совсем поверхностно знаю с++, но эту проблему мне необходимо срочно решить(нет времени на прочтение книги)
Есть некие глобальные библиотеки заданные в IDEA, могу ли я их подключить в buildgradle? Если я подключаю их вручную, то они сбрасываются при первом...