2016-04-19 6 views
0

Я хочу получить текст из всех QTextEdit в mainLayout. Вот моя структура.Получить детей от QGridLayout - Qt

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

Я делаю так, но сбой во время выполнения. Я думаю, что я что-то пропустил с детской структурой.

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

Мой вопрос, как получить все QtextEdit тексты из этой структуры?

+1

Почему вы так сильно заставляете свою жизнь? Просто сохраните указатель на редактор как поле класса (MainWindow) и используйте вместо него локальное значение. –

+0

Я согласен с Мареком. Вместо всех этих поисковых операций, просто сохраните свой 'QTextEdit' в контейнере, таком как 'QVector' или' QList'. – thuga

ответ

1

Вам не нужно копаться в макете. Вместо этого попробуйте следующее:

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

У вас есть право. Это очень просто. –