0

我需要创建一个具有相同类型和另一个文本的小部件。我的第一次尝试是创建一个方法来检查多个案例的类型并返回一个指向它的指针。像这样的东西:

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。

提前致谢。

4

1 回答 1

0

你应该能够使用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;
}
于 2013-10-15T10:34:00.730 回答