Как правильно выполнять connect() для List?

Есть лист объектов, а конкретно QTextEdit(). QDynamicListEdit просто child с некоторыми дополнительными переменными

QList<QDynamicLineEdit*> listLineEdit;

Лист пополняется объектами по нажатию кнопки, т.е добавляется еще один QTextEdit.

void MainWindow::addTranslateButtonHandler()
{
   QDynamicLineEdit *newLineEdit = new QDynamicLineEdit();
   listLineEdit.append(newLineEdit);
   translateLayout ->addRow("Translate "+QString::number(newLineEdit->getId()),newLineEdit);
}

Есть событие, которое должен обрабатывать каждый элемент списка

void MainWindow::textChangedTextEditHandler(){
    QSize size = exampleTextEdit->document()->size().toSize();
    exampleTextEdit->setFixedHeight(size.height() + 3);
}

Как правильно и красиво сделать connect() ко всем объектам в List?


Ответы (1 шт):

Автор решения: Fat-Zer

В любом случае придётся коннектится к каждому элементу списка. Проще всего это сделать прямо при создании. Список в принципе не нужен.

Чтобы определять, от какого именно виджета пришёл сигнал можно использовать или соединение с лямбдой:

void MainWindow::addTranslateButtonHandler() {
   QDynamicLineEdit *newLineEdit = new QDynamicLineEdit();
   // ...
   connect(newLineEdit, &QTextEdit::textChanged, [newLineEdit](){
         QSize size = newLineEdit->document()->size().toSize();
         newLineEdit->setFixedHeight(size.height() + 3);
   });
}

или sender() в обычном слоте:

void MainWindow::textChangedTextEditHandler(){
    QTextEdit *exampleTextEdit = qobject_cast<QTextEdit*>(sender());
    assert(exampleTextEdit);
    QSize size = exampleTextEdit->document()->size().toSize();
    exampleTextEdit->setFixedHeight(size.height() + 3);
}
→ Ссылка