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

C++ 从另一个小部件创建一个小部件作为原型,c++,qt,C++,Qt,我需要从另一个窗口创建一个具有相同类型和文本的窗口小部件。我的第一次尝试是创建一个方法,用于检查多个案例的类型并返回指向它的指针。大概是这样的: QWidget* createFromAnother(const QWidget* prototype) { QWidget* wOutput = 0; if(prototype->metaObject()->className() == "QTextEdit") { wOutput = new QTe

我需要从另一个窗口创建一个具有相同类型和文本的窗口小部件。我的第一次尝试是创建一个方法,用于检查多个案例的类型并返回指向它的指针。大概是这样的:

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

提前谢谢

您应该能够为此使用:

QWidget* createFromAnother(const QWidget* prototype)
{
    QWidget* wOutput = qobject_cast<QWidget*>(prototype->metaObject()->newInstance());

    QString temp = prototype->property("text");
    wOutput->setProperty("text", temp);

    return wOutput;
}
QWidget*从另一个创建(const QWidget*原型)
{
QWidget*wOutput=qobject_cast(原型->元对象()->newInstance());
QString temp=prototype->property(“文本”);
wOutput->setProperty(“文本”,临时);
返回wOutput;
}

但是请注意,只有在类构造函数声明为Q_INVOKABLE时,这才有效。据我所知,Qt的内置小部件中没有一个能够做到这一点,所以除非您创建感兴趣的子类,否则这种方法无法实现这一点。