Domanda

Sto cercando di tenere traccia del segnale TextChanged () su per il pugno di QTextEdits. Io voglio fare la stessa cosa, indipendentemente dalla modifica del testo che emette il segnale: deselezionare la sua casella di controllo associata a un QListWidget se diventa vuota e lasciarlo controllare il contrario. La funzione che ho così per è la seguente:

void MainWindow::changed()
{
    QString tempStr = ui->hNMRedit->toPlainText();
    if(tempStr != "")
    {
       ui->checkList->item(0)->setCheckState(Qt::Checked);
    }
    else
    {
       ui->checkList->item(0)->setCheckState(Qt::Unchecked);
    }
}

Con l'attuale approccio, mi avrebbe dovuto fare una funzione come questa per ogni QTextEdit; ogni funzione contenente codice praticamente identici. Se ho memorizzato ciascuna delle modifiche al testo in un array (così ho potuto trovare il loro indice associato nel QListWidget), sarebbe possibile per me avere uno slot come questo?

void MainWindow::changed(QWidget *sender)   // for whichever text edit emits the
                                            // textChanged() signal
{
    QString tempStr = sender->toPlainText();
    if(tempStr != "")
    {
       // I would potentially use some sort of indexOf(sender) function on the array I 
       // mentioned earlier here... a little new to Qt, sorry
       ui->checkList->item(array.indexOf(sender))->setCheckState(Qt::Checked);
    }
    else
    {
       // same as above...
       ui->checkList->item(array.indexOf(sender))->setCheckState(Qt::Unchecked);
    }
}

Questo è possibile o devo solo creare uno slot separato per ogni modifica del testo? Per favore fatemi sapere se sono necessarie ulteriori chiarimenti!

Infine, mi sento come l'unica differenza significativa tra i QLineEdits e QTextEdits è la dimensione predefinita. A favore di mantenere le cose coerenti, devo solo usare uno di questi oggetti durante la mia UI?

Grazie !!!

È stato utile?

Soluzione

Penso che si manca il punto di slot e segnali. Come stai creando i collegamenti? Stai cercando di selezionare una casella quando uno del cambiamento caselle di testo? Se è così utilizzare un QSignalMapper per mappare i segnali textChanged() per inviare un valore true e connect che allo slot QCheckBox setChecked(bool).

Se questo è troppo complicato sottoclasse QCheckBox e creare un insieme di funzioni checkBox() uncheckBox() in modo da poter alternare gli stati senza una variabile. Quindi collegare il textChanged() QTextEdit alla sottoclasse checkBox()

Se questo non è quello che stai cercando, almeno sottoclasse QTextEditto prendere in QCheckBox che si può cambiare quando il testo cambia invece di duplicare il codice per ogni QTextEdit

Altri suggerimenti

Tutto ciò che serve è un hash di QAbstractButton*, digitato da QTextEdit*. Nello slot, si guarda il sender() nel hash, se trovato hai il pulsante di cui avete bisogno. Questo è esattamente ciò che viene fatto dal QSignalMapper: è possibile mappare da un QWidget* mittente al vostro tasto QWidget*. Utilizzare qobject_cast al cast QAbstractButton*.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top