如何在Qt和QObject的子类中使用pimpl习语

时间:2016-07-26 13:03:23

标签: c++ qt qobject pimpl-idiom moc

我想知道在Qt对象中实现pimpl习惯用法的最简单方法。我想拥有的是这样的:

pimpl.h:

class B;

class A: public QObject {
    B *b;
}

pimpl.cxx:

class B: public QObject {
}

现在,很明显,Qt不会通过B类来为它创建moc。如何处理?我希望明确地在.cxx中实现B.

2 个答案:

答案 0 :(得分:4)

你可以创建一个包含B定义的pimpl-private.h,它只包含在pimpl.cxx中,而不是其他地方。然后你可以在这个标题上运行moc。

答案 1 :(得分:2)

可以通过添加

将代码放在.cpp文件中
#inlude "pimpl.moc"

在" pimpl.cxx"的最后(!)并重新运行qmake。这将生成一个Makefiule规则,通过moc运行文件并将输出放入" pmipl.moc"所以一切都神奇地起作用。