从另一个创建一个小部件作为原型

问题描述:

我需要创建一个具有相同类型和另一个文本的小部件。我第一次尝试将创建一个方法,检查多个案例的类型并返回一个指针。类似这样的:从另一个创建一个小部件作为原型

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; 
} 
+1

不过请注意,如果类的构造已被宣布与Q_INVOKABLE这仅适用。据我所知,Qt的内置小工具没有一个能够做到这一点,所以这种方法不适用,除非你创建你感兴趣的子类。 –