をオーバーライドするQTextDocumentのサブクラスがあります。QTextDocument::loadResource(int type, const QUrl &name)
クローンしたい。
アイデア?
をオーバーライドするQTextDocumentのサブクラスがあります。QTextDocument::loadResource(int type, const QUrl &name)
クローンしたい。
アイデア?
そのためには使えませんQTextDocument::clone
。仮想ではないため、再実装することもできません。別の 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
実装とは逆にそれらをコピーしません。これは問題になる可能性があるため、このアプローチは完全ではありません。