Клон 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
реализация. Это может быть проблемой, поэтому такой подход не идеален.