2013-08-03 4 views
0

나는 서브 클래스QTextDocumentQTextDocument::loadResource(int type, const QUrl &name)을 오버라이드합니다.클론 QTextDocument 서브 클래스

복제하고 싶습니다.

아이디어가 있으십니까?

답변

1

QTextDocument::clone은 사용할 수 없습니다. 가상이 아니기 때문에 다시 구현할 수도 없습니다. 다른 복제 방법을 작성해야합니다 (이름을 clone으로 지정할 수 있지만 혼동을 피하기 위해 다른 이름을 지정합니다). 복제는 직접 구현해야합니다. 당신은 한 물체에서 다른 물체로 콘텐츠를 복사 할 toHtmlsetHtml를 사용할 수 있습니다 복사해야하지만 다른 많은 특성

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 구현과 반대로 복사되지 않습니다. 이는 문제가 될 수 있으므로이 방법이 완벽하지는 않습니다.