Binary Compatibility Workarounds: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 11: Line 11:
Use a Q_PRIVATE_SLOT:
Use a Q_PRIVATE_SLOT:


<code><br /> class A: public QObject<br /> {<br /> Q_OBJECT<br /> <br /> private:<br /> Q_PRIVATE_SLOT(d_func(), void myPrivateSlot())<br /> };
<code>
class A: public QObject
{
Q_OBJECT
private:
Q_PRIVATE_SLOT(d_func(), void myPrivateSlot())
};


/* in .cpp file '''/
/* in .cpp file */
<br /> void APrivate::myPrivateSlot() {…}
 
<br /> #include &quot;moc_a.cpp&amp;quot;<br /></code>
void APrivate::myPrivateSlot() {…}
<br />Pitfalls to avoid:
 
<br />''' Don't include `a.moc`, but `moc_a.cpp` in your .cpp file<br />* Q_PRIVATE_SLOT takes the complete signature of the private slot, not just its name
#include "moc_a.cpp"
</code>
 
Pitfalls to avoid:
 
''' Don't include `a.moc`, but `moc_a.cpp` in your .cpp file
* Q_PRIVATE_SLOT takes the complete signature of the private slot, not just its name

Revision as of 10:19, 25 February 2015


Binary Compatibility Workarounds

This page describes some workarounds for keeping binary compatibility in patch releases.

You should read the KDE reference: http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++

Declaring a slot for private classes (d-pointer)

Use a Q_PRIVATE_SLOT:

 class A: public QObject
 {
 Q_OBJECT
 
 private:
 Q_PRIVATE_SLOT(d_func(), void myPrivateSlot())
 };

/* in .cpp file */

 void APrivate::myPrivateSlot() {}

 #include "moc_a.cpp"

Pitfalls to avoid:

Don't include `a.moc`, but `moc_a.cpp` in your .cpp file

  • Q_PRIVATE_SLOT takes the complete signature of the private slot, not just its name