Клон QTextDocument Подкласс

У меня есть подкласс QTextDocument, который переопределяет QTextDocument::loadResource(int type, const QUrl &name),

Я хочу клонировать это.

Идеи?

1 ответ

Решение

Вы не можете использовать QTextDocument::clone для этого. Вы также не можете переопределить это, потому что это не виртуально. Вы должны создать еще один метод клонирования (вы можете назвать его clone но я бы дал ему другое имя, чтобы избежать путаницы) и сам реализовал клонирование. Ты можешь использовать toHtml а также setHtml скопировать содержимое из одного объекта в другой:

MyTextDocument* MyTextDocument::my_clone(QObject * parent = 0) {
  MyTextDocument* other = new MyTextDocument(parent);
  other->setHtml(toHtml());
  return other;
}

Однако есть много других свойств, которые следует скопировать. Смотри как QTextDocument::clone Метод реализован:

QTextDocument *QTextDocument::clone(QObject *parent) const
{
    Q_D(const QTextDocument);
    QTextDocument *doc = new QTextDocument(parent);
    QTextCursor(doc).insertFragment(QTextDocumentFragment(this));
    doc->rootFrame()->setFrameFormat(rootFrame()->frameFormat());
    QTextDocumentPrivate *priv = doc->d_func();
    priv->title = d->title;
    priv->url = d->url;
    priv->pageSize = d->pageSize;
    priv->indentWidth = d->indentWidth;
    priv->defaultTextOption = d->defaultTextOption;
    priv->setDefaultFont(d->defaultFont());
    priv->resources = d->resources;
    priv->cachedResources.clear();
#ifndef QT_NO_CSSPARSER
    priv->defaultStyleSheet = d->defaultStyleSheet;
    priv->parsedDefaultStyleSheet = d->parsedDefaultStyleSheet;
#endif
    return doc;
}

Если эти свойства важны для вас, вам необходимо скопировать их вручную в свой my_clone реализация. Вы можете использовать QTextDocumentPrivate класс, потому что это внутреннее. Таким образом, вы не можете просто скопировать реализацию по умолчанию. Но есть нормальный способ установить каждое из перечисленных свойств в API.

Помните о проблемах прямой совместимости. Если новые свойства появились в более новых версиях Qt, ваша реализация не будет копировать их в противоположность значениям по умолчанию clone реализация. Это может быть проблемой, поэтому такой подход не идеален.

Другие вопросы по тегам