13#define ENUM_QDATASTREAM_OPS_DECL(CLASS, ENUM) \
14 QDataStream &operator<<(QDataStream &, CLASS::ENUM const &); \
15 QDataStream &operator>>(QDataStream &, CLASS::ENUM &);
17#define ENUM_QDATASTREAM_OPS_IMPL(CLASS, ENUM) \
18 QDataStream &operator<<(QDataStream &os, CLASS::ENUM const &v) { \
19 auto const &mo = CLASS::staticMetaObject; \
20 return os << mo.enumerator(mo.indexOfEnumerator(#ENUM)).valueToKey(v); \
23 QDataStream &operator>>(QDataStream &is, CLASS::ENUM &v) { \
27 auto const &mo = CLASS::staticMetaObject; \
28 auto const &me = mo.enumerator(mo.indexOfEnumerator(#ENUM)); \
30 v = static_cast<CLASS::ENUM>(me.keyToValue(buffer, &ok)); \
34 v = static_cast<CLASS::ENUM>(me.value(0)); \
39#define ENUM_CONVERSION_OPS_DECL(CLASS, ENUM) \
40 QString enum_to_qstring(CLASS::ENUM const &);
42#define ENUM_CONVERSION_OPS_IMPL(CLASS, ENUM) \
43 QString enum_to_qstring(CLASS::ENUM const &m) { \
44 auto const &mo = CLASS::staticMetaObject; \
46 mo.enumerator(mo.indexOfEnumerator(#ENUM)).valueToKey(m)}; \
50#define ENUM_QDEBUG_OPS_DECL(CLASS, ENUM)
51#define ENUM_QDEBUG_OPS_IMPL(CLASS, ENUM)
53inline void throw_qstring(QString
const &qs) {
54 throw std::runtime_error{qs.toLocal8Bit().constData()};
57QString font_as_stylesheet(QFont
const &);
61void update_dynamic_property(QWidget *,
char const *property,
62 QVariant
const &value);
64template <
class T>
class VPtr {
66 static T *asPtr(QVariant v) {
67 return reinterpret_cast<T *
>(v.value<
void *>());
70 static QVariant asQVariant(T *ptr) {
71 return QVariant::fromValue(
reinterpret_cast<void *
>(ptr));
76Q_DECLARE_METATYPE(QHostAddress);
78inline bool is_broadcast_address(QHostAddress
const &host_addr) {
79 return host_addr.isBroadcast();
82inline bool is_multicast_address(QHostAddress
const &host_addr) {
83 return host_addr.isMulticast();
Definition qt_helpers.h:64