Pregunta

Estoy tratando de hacer un seguimiento de la señal TextChanged () entra por puñado de QTextEdits. Quiero hacer lo mismo con independencia de la edición de texto que emite la señal: desmarque la casilla de verificación asociada en un QListWidget si se vuelve vacía y dejar que lo revisen lo contrario. La función que tengo así que para es el siguiente:

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 el enfoque actual, tendría que hacer una función como esta para cada QTextEdit; cada función que contiene código virtualmente idénticas. Si Almacené cada una de las ediciones de texto en una matriz (por lo que pude encontrar su índice asociado en el QListWidget), ¿sería posible para mí tener una ranura de esta manera?

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);
    }
}

¿Es esto posible o debería simplemente crear una ranura separada para cada edición de texto? Por favor, hágamelo saber si se necesita cualquier aclaración adicional!

Por último, siento que la única diferencia significativa entre QLineEdits y QTextEdits es el tamaño predeterminado. A favor de mantener las cosas consistentes, debería utilizar sólo uno de estos objetos de interfaz de usuario a través de mi?

Gracias !!!

¿Fue útil?

Solución

creo que se echa en falta el punto de ranuras y señales. ¿Cómo estás creando las conexiones? ¿Estás tratando de marcar una casilla cuando cualquiera de los cuadros de texto del cambio? Si es así utilizar un QSignalMapper para mapear las señales textChanged() para enviar un valor de verdadero y de conexión que a la ranura QCheckBox setChecked(bool).

Si eso también es subclase QCheckBox complicado y crear un conjunto de funciones checkBox() uncheckBox() para que pueda alternar estados sin una variable. A continuación, conecte el textChanged() QTextEdit a su subclase checkBox()

Si esto no es lo que busca, al menos subclase toma QTextEditto en un QCheckBox que puede cambiar cuando cambia el texto en vez de duplicar código para cada QTextEdit

Otros consejos

Todo lo que necesita es un hash de QAbstractButton*, introducido por QTextEdit*. En la ranura, usted busca la sender() en el hash, si se encuentra que tenga el botón que necesita. Esto es precisamente lo que se hace por el QSignalMapper: puede asignar desde un remitente a su QWidget* botón QWidget*. Uso qobject_cast de yeso para QAbstractButton*.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top