es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo iterar y ordenar los elementos de QGridLayout

Tengo un QGridLayout con 225 hijos de QTextEdit. Necesito poblar una matriz QString board[15][15] con sus valores de texto basados en la posición de cada QTextEdit. Si hacía esto de la larga manera, se vería así:

boardArray[0][0] = ui->box0x0->toPlainText();
boardArray[0][1] = ui->box0x1->toPlainText();
boardArray[0][2] = ui->box0x2->toPlainText();

Eso parece una solución bastante mala. Así que decidí iterar sobre los hijos de QTextEdit de la cuadrícula para poder manipular cada uno;

QList<QTextEdit> textEdits = ui->gridLayout->findChildren();
for (QTextEdit
box : textEdits) {
// Sin embargo, no sabemos dónde está esta caja
board[ ??? ][ ??? ] = box->toPlainText();
}

Desafortunadamente, no hay una propiedad QTextEdit.row o algo así, por lo que no sé en qué orden están o cómo podría poblar mi matriz de tablero sin que sea aleatorio.

¿Tienen alguna idea de cómo puedo organizar los widgets QTextEdit en mi matriz de tablero? No estaba seguro de cómo hacerlo con esa técnica de iteración.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando llenar un arreglo QString board[15][15] con los valores textuales de 225 widgets QTextEdit que son hijos de un QGridLayout. Desafortunadamente, no existe una propiedad de QTextEdit.row o algo así, por lo que no sabes el orden en que están o cómo podrías llenar el arreglo board sin que sea aleatorio.

    Una posible solución es usar el método QGridLayout::getItemPosition() para obtener la fila y columna de cada widget QTextEdit. Luego, puedes usar esta información para llenar tu arreglo board.

    Por ejemplo:

    QList<qtextedit*> textEdits = ui->gridLayout->findChildren<qtextedit *="">();
    for (QTextEdit* box : textEdits) {
        int row, column;
        ui->gridLayout->getItemPosition(textEdits.indexOf(box), &row, &column);
        board[row][column] = box->toPlainText();
    }
    

    Esto debería permitirte llenar tu arreglo board con los valores de texto de cada widget QTextEdit en el orden correcto.</qtextedit*>

Comments are closed.