Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
Binary Compatibility Workarounds: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(Adapt to page move) |
||
(7 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Developing_Qt::Guidelines]] | |||
This page describes some workarounds for keeping binary compatibility in patch releases. | This page describes some workarounds for keeping binary compatibility in patch releases. You should read the KDE reference: [https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B Binary Compatibility Issues with C++]. | ||
Specifically, the d-pointer technique is explained in much detail in [[D-Pointer|D-Pointer: What Private Implementation is and how it works]]. | |||
==Declaring a slot for private classes (d-pointer)== | == Declaring a slot for private classes (d-pointer) == | ||
Use a Q_PRIVATE_SLOT: | Use a Q_PRIVATE_SLOT: | ||
<code lang="cpp"> | |||
class A: public QObject | |||
{ | |||
Q_OBJECT | |||
… | |||
private: | |||
Q_PRIVATE_SLOT(d_func(), void myPrivateSlot()) | |||
}; | |||
/* in .cpp file */ | |||
void APrivate::myPrivateSlot() {…} | |||
#include "moc_a.cpp" | |||
</code> | |||
Pitfalls to avoid: | 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 | * Q_PRIVATE_SLOT takes the complete signature of the private slot, not just its name | ||
Latest revision as of 13:43, 25 August 2017
This page describes some workarounds for keeping binary compatibility in patch releases. You should read the KDE reference: Binary Compatibility Issues with C++.
Specifically, the d-pointer technique is explained in much detail in D-Pointer: What Private Implementation is and how it works.
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