Создать виджет из другого в качестве прототипа

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.

Заранее спасибо.

Теги:
qt

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;
}
  • 1
    Однако обратите внимание, что это работает, только если конструктор класса был объявлен с помощью Q_INVOKABLE. Насколько я могу судить, ни один из встроенных виджетов Qt не делает этого, поэтому этот метод не сработает, если вы не создадите подклассы тех, которые вас интересуют.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню