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!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.