LINUX.ORG.RU

Лямбда-выражения в QObject::connect

 , ,


0

1

Здравствуйте.

Есть форма с QCheckBox при checked по которому создается экземпляр другой формы (form2), при unchecked, соответственно, экземпляр form2 удаляется:

Form_1::Form_1(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Form_1)
{
    ui->setupUi(this);

    connect(ui->checkBox_1, &QCheckBox::stateChanged, this, &Form_1::showForm2);
}
...
void Form_1::showForm2(int state)
{
    if(state == Qt::Checked) {
        form2 = new Form_2(this); // Form2 *form2; declared in form1.h
        form2->show();
        connect(form2, &Form_2::finished, [this](){
            ui->checkbox_1->setCheckState(Qt::Unchecked);
        });
    }
    else if (state == Qt::Unchecked){
        delete form2;
    }
}
Собственно вопрос в том, что делать с connect на Form_2::finished? Нужно ли делать disconnect? Или после delete form2; это уже не обязательно?



Последнее исправление: ByKByK (всего исправлений: 1)

Почему не сделать вторую форму полем первой, и не прятать ее просто когда не нужна? Да и коннект сделать один раз и все.

CrossFire ★★★★★
()

[this]

Не делай так. Захватывай QPointer<Form_1> и проверяй в обработчике на nullptr.

anonymous
()
Ответ на: комментарий от CrossFire

Хочу понять, чтобы знать когда буду динамически кидать QWidget на форму и присобачивать к ним лямбда-выражения в качестве обработчика.

ByKByK
() автор топика
Ответ на: комментарий от ByKByK

Можно более жизненный пример, а то как-то быдлокодом пахнет?

CrossFire ★★★★★
()

Не обязательно.

KblCb ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.