Problema con removeWidget
-
ciao!
ho aggiunto due QRadioButton ad un QHBoxLayout, e sul primo radio button ho collegato questo metodo:
connect(massivo, SIGNAL(toggled(bool)), this, SLOT(onMassivoChecked())); void ForzaListiniMovimentiWindow::onMassivoChecked() { if (massivo->isChecked()) { qDebug() << "ok"; hl->addWidget(txtListino); hl->addWidget(txtNumerat); hl->addWidget(txtPeriodo); hl->addWidget(txtNumero); hl->addWidget(txtSconto); hl->addWidget(btnCerca); hl->addWidget(btnUpdate); } else { qDebug() << "ko"; hl->removeWidget(txtListino); hl->removeWidget(txtNumerat); hl->removeWidget(txtPeriodo); hl->removeWidget(txtNumero); hl->removeWidget(txtSconto); hl->removeWidget(btnCerca); hl->removeWidget(btnUpdate); } }
cambiando la selezione dei radio button, il qDebug mi mostra i valori corretti.
inoltre i componenti vengono aggiunti corrattemente, ma non vengono rimossi.
in sostanza, quando entro nell'else, succede che:- il qDebug mi mostra ko
- il secondo radio button, quindi quello cliccato, scompare
- gli altri widget rimangono
come devo fare per rimiuovere queu widget??
-
quando li rimuovi li devi spostare da un altra parte?
Di solito, per questi casi, si usa hide/show (o setVisible) per efficienza:
void ForzaListiniMovimentiWindow::onMassivoChecked(bool val) { for(QWidget* singleWid : {txtListino,txtNumerat,txtPeriodo,txtNumero,txtSconto,btnCerca,btnUpdate}) singleWid->setVisible(val); }
occhio che ho aggiunto un argomento alla funzione quindi devi aggiungerlo anche al connect o, ancora meglio, usa il nuovo connect:
connect(massivo, &QRadioButton::toggled, this, &ForzaListiniMovimentiWindow::onMassivoChecked);
-
@VRonin said in Problema con removeWidget:
quando li rimuovi li devi spostare da un altra parte?
Di solito, per questi casi, si usa hide/show (o setVisible) per efficienza:
void ForzaListiniMovimentiWindow::onMassivoChecked(bool val) { const auto widgetDaCambiare[] = {txtListino,txtNumerat,txtPeriodo,txtNumero,txtSconto,btnCerca,btnUpdate}; for(QWidget* singleWid : widgetDaCambiare) singleWid->setVisible(val); }
occhio che ho aggiunto un argomento alla funzione quindi devi aggiungerlo anche al connect o, ancora meglio, usa il nuovo connect:
connect(massivo, &QRadioButton::toggled, this, &ForzaListiniMovimentiWindow::onMassivoChecked);
ciao!
si infatti alla fine ho optato per il setVisible.
grazie!