首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克隆QTextDocument子类

克隆QTextDocument子类
EN

Stack Overflow用户
提问于 2013-08-03 21:30:10
回答 1查看 510关注 0票数 0

我有一个子类 of QTextDocument,它覆盖QTextDocument::loadResource(int type, const QUrl &name)

我想克隆它。

想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-03 23:02:23

您不能为此使用QTextDocument::clone。您也不能重新实现它,因为它不是虚拟的。您应该创建另一个克隆方法(您可以将它命名为clone,但我会给它另一个名称以避免混淆),并实现自己的克隆。可以使用toHtmlsetHtml将内容从一个对象复制到另一个对象:

代码语言:javascript
复制
MyTextDocument* MyTextDocument::my_clone(QObject * parent = 0) {
  MyTextDocument* other = new MyTextDocument(parent);
  other->setHtml(toHtml());
  return other;
}

然而,还有许多其他属性应该被复制。请参见如何实现QTextDocument::clone方法:

代码语言:javascript
复制
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实现相反地复制它们。这可能是个问题,所以这种方法并不完美。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18037512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档