Мне нужно создать виджет с тем же типом и текстом от другого. Моя первая попытка будет создать метод, который проверяет тип для нескольких случаев и возвращает указатель на него. Что-то вроде этого:
QWidget* createFromAnother(const QWidget* prototype)
{
QWidget* wOutput = 0;
if(prototype->metaObject()->className() == "QTextEdit")
{
wOutput = new QTextEdit();
}else if(prototype->metaObject()->className() == "QLineEdit")
{
wOutput = QLineEdit();
}else if(...){ }
// -- > The rest of bad-designed code
QString temp = prototype->property("text");
wOutput->setProperty("text", temp);
return wOutput;
}
Да... это не очень хорошая идея. Итак, прежде чем начать. Есть ли другие способы его решения?
Моя версия Qt - 4.6.2.
Заранее спасибо.
Вы можете использовать QMetaObject::newInstance()
для этого:
QWidget* createFromAnother(const QWidget* prototype)
{
QWidget* wOutput = qobject_cast<QWidget*>(prototype->metaObject()->newInstance());
QString temp = prototype->property("text");
wOutput->setProperty("text", temp);
return wOutput;
}