2016-07-26 16 views
0

Qt 객체에서 pimpl 관용구를 구현하는 가장 쉬운 방법을 알고 싶습니다.Qt와 QObject 하위 클래스를 사용하여 pimpl 관용구를 사용하는 방법

pimpl.h :

class B; 

class A: public QObject { 
    B *b; 
} 

pimpl.cxx : 알 수있는 바와 같이 이제

class B: public QObject { 
} 

, Qt는가 클래스 B를 통과하지 않습니다 내가 갖고 싶은 것은이 같은 것입니다 그것을위한 moc를 만드십시오. 어떻게 처리 할 수 ​​있습니까? .cxx에 B를 명시 적으로 구현하고 싶습니다.

+0

[Qt의 PIMPL 관용구 사용법] (http://stackoverflow.com/questions/25250171/how-to-use-the-qts-pimpl-idiom) – TheDarkKnight

+0

@TheDarkKnight 가능한 한 멀리까지 할 수 있습니다. 참조, 링크 된 답변에서'QObject' 인 impl 클래스 자체에 대한 언급이 없으므로 나는 열린 채로 남기로 결심했다. – anderas

답변

4

B의 정의가 포함 된 pimpl-private.h를 만들 수 있으며 pimpl.cxx에서만 포함되어 있습니다. 그런 다음이 헤더를 통해 moc를 실행할 수 있습니다.

+0

예, 괜찮습니다. 그러나, 나는 더 익숙해졌으며 대부분의 부분에 대해 유형을 선언/포함하지 않아도되므로 .cxx 파일에 가능한 한 해킹을 찾고있었습니다. –

+0

@code_not_yet_complete : https://stackoverflow.com/questions/34928933/why-is-important-to-include-moc-file-at-end-of-a-qt-source-code-file을 참조하십시오. – peppe

1

이 마지막 (!) "pimpl.cxx"다시 실행 qmake에의에

#inlude "pimpl.moc" 

을 추가하여 .cpp 파일의 코드를 가질 수 있습니다. 이렇게하면 moc를 통해 파일을 실행하고 결과를 "pmipl.moc"에 저장하는 Makefiule 규칙이 생성되어 모든 것이 마술처럼 작동합니다.