Qt - Как конфертировать из QObject в элементы пользовательского интерфейса?

Я работаю в Qt 4.7, и у меня есть объект QWidget в моем диалоге. Мне нужно пройти через каждого из детей и извлечь текущий текст в QStringList. Каждый другой объект - это QCheckBox, а остальные - QComboBox (мне просто понадобится текстовая часть обоих). Пока что единственный способ сделать это - использовать функцию children (), чтобы получить их как QObject * и привести их, например, так:

QStringList textlist;
for(int i = 0; i < ui->myWidget->children().size(); i++)
{
    if(i % 2 == 0)
    {
        QCheckBox *q = (QCheckBox *)ui->myWidget->children().at(i);
        textlist.append(q->text());
    }
    else
    {
        QComboBox *q = (QComboBox *)ui->myWidget->children().at(i);
        textlist.append(q->currentText());
    }
}

Тем не менее, когда я пытаюсь использовать это, он прекрасно собирается и компилируется, но затем вылетает при запуске. Я проверил, и оба класса являются подклассами (хотя и косвенно через QAbstractButton и QWidget) в QObject, который является типом объектов в списке ui-> myWidget-> children (), поэтому я чувствую, что они должны быть в состоянии привести его таким образом , Я не много работал с такими вещами раньше, поэтому я не уверен, есть ли лучший способ сделать это. Если у кого-то есть какие-либо идеи, это будет с благодарностью. Спасибо!

ОБНОВЛЕНИЕ: Итак, я не могу заставить кастинг работать таким образом или с qobject_cast. Однако я обнаружил, что могу перейти от QObject к QWidget, и я думаю, что я должен быть в состоянии перейти от QWidget к необходимым объектам с помощью dynamic_cast, но это тоже не работает. Прямо сейчас у меня есть это:

QStringList textlist;
for(int i = 0; i < ui->myWidget->children().size(); i++)
{
    QWidget *qw = qobject_cast<QWidget*>(ui->myWidget->children().at(i)
    if(i % 2 == 0)
    {
        QComboBox *q = dynamic_cast<QComboBox*>(qw);
        if(q)
        {
            textlist.append(q->text());
        }
    }
    else
    {
        QCheckBox *q = dynamic_cast<QCheckBox*>(qw);
        if(q)
        {
            textlist.append(q->currentText());
        }
    }
}

Если у кого-то есть идеи, я буду признателен за помощь. Спасибо.

ОБНОВЛЕНИЕ 2: Я не нашел много онлайн, который бы помог с этим до сих пор, так что я могу также спросить, есть ли возможность делать это БЕЗ приведения, то есть получать объекты непосредственно из QWidget в их первоначальном типе, я бы действительно цените это также. Я не в восторге от своей нынешней стратегии или чего-то еще, это был единственный способ, которым я мог бы подумать - я возьму все, что работает на данный момент.

Ответы на вопрос(1)

Ваш ответ на вопрос