Как правильно выполнять 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);
}