We were able to fix it by adding these two lines:
QCustomPlot.hpp: Q_DECLARE_METATYPE(QCPRange); QCustomPlot.cpp: static const int id = qRegisterMetaType<QCPRange>();
Seemingly having Q_DECLARE_TYPEINFO(QCPRange, Q_MOVABLE_TYPE); isn't enough, and neither is Q_DECLARE_METATYPE, one ALSO has to have the qRegisterMetaType? Which was news to me, but then, that's what that one easily missed paragraph of the Qt Documentation said... https://doc.qt.io/qt-5/qmetatype.html#qRegisterMetaType-1
To use the type T in QVariant, using Q_DECLARE_METATYPE() is sufficient. To use the type T in queued signal and slot connections, qRegisterMetaType<T>() must be called before the first connection is established.