title: Qt - How to convert from QObject to UI elements?
body: <p>I am working in Qt 4.7, and I have a QWidget object in my dialog. I need to go through each of the children and extract the current text into a QStringList. Every other object is a QCheckBox, and the rest are QComboBoxes (I would just need the text portion of both). So far the only way I could think of to do this would be to use the children() function to get them as QObject*'s and cast them, like this:</p>
  
  <pre><code>QStringList textlist;
  for(int i = 0; i &lt; ui-&gt;myWidget-&gt;children().size(); i++)
  {
      if(i % 2 == 0)
      {
          QCheckBox *q = (QCheckBox *)ui-&gt;myWidget-&gt;children().at(i);
          textlist.append(q-&gt;text());
      }
      else
      {
          QComboBox *q = (QComboBox *)ui-&gt;myWidget-&gt;children().at(i);
          textlist.append(q-&gt;currentText());
      }
  }
  </code></pre>
  
  <p>However, when I try to use this, it builds and compiles fine, but then crashes when it's run. I checked and both classes are subclasses (albeit indirectly through QAbstractButton and QWidget) of QObject, which is the type of the objects in the list ui->myWidget->children(), so I feel like they should be able to cast this way. I haven't worked much with this kind of thing before so I'm not sure if there's a better way to do this. If anyone has any ideas, it would be greatly appreciated. Thanks!</p>
  
  <p>UPDATE: So, I can't get the casting to work this way or with the qobject_cast. I HAVE however discovered that I can go from QObject to QWidget, and I think I should be able to go from QWidget to the needed objects with dynamic_cast, but that doesn't work either. Right now I have this:</p>
  
  <pre><code>QStringList textlist;
  for(int i = 0; i &lt; ui-&gt;myWidget-&gt;children().size(); i++)
  {
      QWidget *qw = qobject_cast&lt;QWidget*&gt;(ui-&gt;myWidget-&gt;children().at(i)
      if(i % 2 == 0)
      {
          QComboBox *q = dynamic_cast&lt;QComboBox*&gt;(qw);
          if(q)
          {
              textlist.append(q-&gt;text());
          }
      }
      else
      {
          QCheckBox *q = dynamic_cast&lt;QCheckBox*&gt;(qw);
          if(q)
          {
              textlist.append(q-&gt;currentText());
          }
      }
  }
  </code></pre>
  
  <p>If anyone has any ideas, I'd appreciate the help. Thank you.</p>
  
  <p>UPDATE2: I haven't found much online that helps with this still, so I may as well ask as well, if there is anyway to do this WITHOUT casting, i.e. getting the objects directly from the QWidget in their original type, I would really appreciate that as well. I'm not heartset on my current strategy or anything, it was just the only way I could think to do it - I'll take anything that works at this point.</p>