QLineEdit
, QLCDNumber
и QSpinBox
уже наследуются от QWidget
. Поэтому, если вы поместите их в QVector
(или в любой другой контейнер, например, std::vector<QWidget*>
), вам придется иметь дело с QWidget
указателями.
Как вы правильно сказали:
wids.push_back(line);
wids.push_back(lcd);
wids.push_back(spn);
Чтобы вернуть ваши соответствующие классы, например, QLineEdit
, вам нужно понизить с QWidget
до QLineEdit
, QLCDNumber
или что-либо еще, наследуемое от QWidget
.
QLineEdit * line = dynamic_cast<QLineEdit*>(wids[0]);
Это, конечно, предполагает, что вы точно знаете, в каком положении находится объект. Конечно, вы можете проверить, успешен ли ваш бросок:
if( line == nullptr )
{
// cast failed, either wids[0] is invalid or does not derive from QWidget
}
else
{
// cast was successful, use 'line' as regular QLineEdit.
}
Однострочник, хотя и небезопасный, но будет:
dynamic_cast<QLineEdit*>(wids[0])->setText("myText");