¿Obteniendo el estado de QCheckBox en un QGridLayout?
-
12-12-2019 - |
Pregunta
Tengo un diseño simple para obtener/configurar estados de IO de una placa USB.Cada fila corresponde a un módulo y columna a un pin IO.El propósito es establecer los estados de las salidas en una fila y ver si las entradas coinciden con las marcadas en otra fila.
Hice esto para configurar el diseño.
QLabel * templab = new QLabel;
templab ->setText(QString("Broche ->"));
gridLayout_2->addWidget(templab, 0, 0);
for (int row = 1; row < modules+1 ;row++)
{
QLabel * templab = new QLabel;
templab ->setText(QString("Module %1").arg(row-1));
gridLayout_2->addWidget(templab, row, 0);
}
for (int col = 1; col < colonnes+1 ;col++)
{
QLabel * templab = new QLabel;
templab ->setNum(col);
gridLayout_2->addWidget(templab, 0, col);
}
for (int row = 1; row < modules +1 ;row++)
{
for (int col = 1; col < colonnes+1 ;col++)
{
QCheckBox* checkBox = new QCheckBox();
gridLayout_2 ->addWidget(checkBox,row,col);
}
}
¿Cómo verifico el estado de las casillas de verificación?
No encontré ninguna pista sobre cómo obtener el estado de una casilla de verificación usando gridLayout_2->itematposition(x,y)
Muchas gracias.
Editar:Siguiendo el consejo de Spyke, utilicé:
QCheckBox * checkBox = findChild<QCheckBox*>(ui->gridLayout_5->itemAtPosition(x,y)->widget()->objectName());
Hay otra forma de hacerlo que descubrí:
QCheckBox * ios[8][16];
for (int row = 1; row < modules +1 ;row++)
{
for (int col = 1; col < colonnes+1 ;col++)
{
ios[row-1][col-1]= new QCheckBox();
ui->gridLayout_5 ->addWidget(ios[row-1][col-1],row,col);
}
}
y para probar el estado:
if (ios[x][y]->checkState() == Qt::Checked)
{
qDebug()<<"Checked"<<endl;
}
else
qDebug()<<"UN Checked"<<endl;
}
Solución
Puedes usar gridLayout->findChild<QCheckBox*>(gridLayout->itemAt(0)->widget()->objectName());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow