D24466: Use ECMGenerateExportHeader to manage deprecated API better
Friedrich W. H. Kossebau
noreply at phabricator.kde.org
Mon Oct 14 16:52:46 BST 2019
kossebau added a comment.
In D24466#546952 <https://phabricator.kde.org/D24466#546952>, @dfaure wrote:
> Maybe Qt doesn't have any deprecated signals?
That would be nice :) A few there are though, e.g. see here some for QComboBox, only using `QT_DEPRECATED_SINCE` & `QT_DEPRECATED_VERSION_X`, but not `QT_MOC_COMPAT`:
https://code.woboq.org/qt5/qtbase/src/widgets/widgets/qcombobox.h.html#223
Perhaps people forgot about it, the macro also not being documented anywhere.
Now finally got around to do some test code to check deprecation with signal/slots:
#include <QObject>
#include <QCoreApplication>
#include <QDebug>
class Object : public QObject
{
Q_OBJECT
public Q_SLOTS:
Q_DECL_DEPRECATED
QT_MOC_COMPAT
void slotIt() {
qDebug() << "handling signal";
}
Q_SIGNALS:
Q_DECL_DEPRECATED
QT_MOC_COMPAT
void signalIt();
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
Object object;
QObject::connect(&object, SIGNAL(signalIt()), &object, SLOT(slotIt()));
QObject::connect(&object, &Object::signalIt, &object, &Object::slotIt);
emit object.signalIt();
return 0;
}
#include "main.moc"
When building this gives:
main.cpp: In function ‘int main(int, char**)’:
main.cpp:29:40: warning: ‘void Object::signalIt()’ is deprecated [-Wdeprecated-declarations]
29 | QObject::connect(&object, &Object::signalIt, &object, &Object::slotIt);
| ^~~~~~~~
main.cpp:20:10: note: declared here
20 | void signalIt();
| ^~~~~~~~
main.cpp:29:68: warning: ‘void Object::slotIt()’ is deprecated [-Wdeprecated-declarations]
29 | QObject::connect(&object, &Object::signalIt, &object, &Object::slotIt);
| ^~~~~~
main.cpp:13:10: note: declared here
13 | void slotIt() {
| ^~~~~~
main.cpp:31:26: warning: ‘void Object::signalIt()’ is deprecated [-Wdeprecated-declarations]
31 | emit object.signalIt();
| ^
main.cpp:20:10: note: declared here
20 | void signalIt();
| ^~~~~~~~
and when running just
handling signal
handling signal
so no runtime warning about the compat signal or slot. Possibly as QT_NO_DEBUG is said to be defined for Qt release builds, so `check_and_warn_compat` will not be run.
So having a _DEPRECATED with signal makes sense also for consumers connecting to the signal with memberfunction-pointer based connect. Will adapt the other patches accordingly.
Not sure what to do about the QT_MOC_COMPAT, so far it should not hurt to keep them, but the question is how useful adding new ones is and whether this is future-proof.
REPOSITORY
R263 KXmlGui
BRANCH
deprecatedapi
REVISION DETAIL
https://phabricator.kde.org/D24466
To: kossebau, #frameworks, dfaure, mlaurent
Cc: kde-frameworks-devel, LeGast00n, GB_2, michaelh, ngraham, bruns
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20191014/b56e03b0/attachment.html>
More information about the Kde-frameworks-devel
mailing list