Search code examples
qtchildrenqobject

Get children from QGridLayout - Qt


I want to get text from all QTextEdit in mainLayout. Here is my structure.

mainLayout = new QGridLayout( centralWidget );
mainLayout->setSpacing(0);
for(int mr = 0; mr < 3; mr++)//ustvarim 3 vrstice
{
    for(int mc = 0; mc < 3; mc++)//ustvarim 3 stolpce
    {
        QFrame * widget = new QFrame;
        widget->setFrameStyle(QFrame::Plain);
        widget->setFrameShape(QFrame::Box);

        QGridLayout * gridLayout = new QGridLayout(widget);
        gridLayout->setSpacing(0);
        gridLayout->setMargin(0);

        for(int r = 0; r < 3; r++)
        {
            for(int c = 0; c < 3; c++)
            {
                QTextEdit * tile = new QTextEdit("0");
                tile->setFrameStyle(QFrame::Plain);
                tile->setFrameShape(QFrame::Box);
                tile->setAlignment(Qt::AlignCenter);

                tile->setStyleSheet("font: 24pt ;");
                gridLayout->addWidget(tile, r, c, 1, 1, Qt::AlignCenter);
            }
        }
       mainLayout->addWidget(widget, mr, mc, 1, 1, Qt::AlignCenter);
    }
}

I'm making like this, but runtime crash. I think I miss something with children structure.

for (int idx = 0; idx < mainLayout - > count(); idx++) {
    QFrame * item = dynamic_cast < QFrame * > (mainLayout - > itemAt(idx));
    for (int id = 0; id < item - > children().count(); id++) {
        QGridLayout * tile1 = dynamic_cast < QGridLayout * > (item - > children().at(id));
        QTextEdit * tile = dynamic_cast < QTextEdit * > (tile1 - > children().at(0));
        QString s = tile - > toPlainText();
        std::cout << s.toStdString() << std::endl;
    }
}

My question is, how to get all QtextEdit texts from this structure?


Solution

  • You don't need to dig into the layout. Instead try the following:

    QList<QTextEdit*> textEdits = centralWidget->findChildren<QTextEdit *>()