2016-07-26 2 views
0

Я хотел бы знать самый простой способ реализовать идиому pimpl в объектах Qt. То, что я хочу, чтобы иметь что-то вроде этого:Как использовать идиому pimpl с Qt и подклассами QObject

pimpl.h:

class B; 

class A: public QObject { 
    B *b; 
} 

pimpl.cxx:

class B: public QObject { 
} 

Теперь, очевидно, Qt не будет проходить класса B в создайте для этого moc. Как это можно обработать? Я хочу, чтобы реализация B в .cxx явно.

+0

Возможный дубликат [Как использовать идиом PIMPL Qt?] (Http://stackoverflow.com/questions/25250171/how-to-use-the-qts-pimpl-idiom) – TheDarkKnight

+0

@ TheDarkKnight Насколько я могу см., нет упоминания о том, что сам класс impl является «QObject» в связанном ответе, поэтому я проголосовал за то, чтобы оставить открытым. – anderas

ответ

4

Вы можете создать pimpl-private.h, который содержит определение B и включен только в 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

Можно иметь код в файле .cpp, добавив

#inlude "pimpl.moc" 

в конце (!) Из «pimpl.cxx» и повторного запуска QMAKE. Это создаст правило Makefiule для запуска файла через moc и выведет выход в «pmipl.moc», чтобы все было волшебным образом.

Смежные вопросы