4#ifndef QTCLASSHELPERMACROS_H
5#define QTCLASSHELPERMACROS_H
7#include <QtCore/qtconfigmacros.h>
10#pragma qt_class(QtClassHelperMacros)
11#pragma qt_sync_stop_processing
16#if defined(__cplusplus)
23#define Q_DISABLE_COPY(Class) \
24 Class(const Class &) = delete;\
25 Class &operator=(const Class &) = delete;
27#define Q_DISABLE_COPY_MOVE(Class) \
28 Q_DISABLE_COPY(Class) \
29 Class(Class &&) = delete; \
30 Class &operator=(Class &&) = delete;
64#define QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(Class) \
65 Class &operator=(Class &&other) noexcept { \
66 Class moved(std::move(other)); \
71#define QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(Class) \
72 Class &operator=(Class &&other) noexcept { \
77template <
typename T>
inline T *qGetPtrHelper(T *
ptr)
noexcept {
return ptr; }
78template <
typename Ptr>
inline auto qGetPtrHelper(Ptr &
ptr)
noexcept ->
decltype(
ptr.get())
79{
static_assert(
noexcept(
ptr.get()),
"Smart d pointers for Q_DECLARE_PRIVATE must have noexcept get()");
return ptr.get(); }
88#define Q_DECLARE_PRIVATE(Class) \
89 inline Class##Private* d_func() noexcept \
90 { Q_CAST_IGNORE_ALIGN(return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr));) } \
91 inline const Class##Private* d_func() const noexcept \
92 { Q_CAST_IGNORE_ALIGN(return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr));) } \
93 friend class Class##Private;
95#define Q_DECLARE_PRIVATE_D(Dptr, Class) \
96 inline Class##Private* d_func() noexcept \
97 { Q_CAST_IGNORE_ALIGN(return reinterpret_cast<Class##Private *>(qGetPtrHelper(Dptr));) } \
98 inline const Class##Private* d_func() const noexcept \
99 { Q_CAST_IGNORE_ALIGN(return reinterpret_cast<const Class##Private *>(qGetPtrHelper(Dptr));) } \
100 friend class Class##Private;
102#define Q_DECLARE_PUBLIC(Class) \
103 inline Class* q_func() noexcept { return static_cast<Class *>(q_ptr); } \
104 inline const Class* q_func() const noexcept { return static_cast<const Class *>(q_ptr); } \
105 friend class Class; \
106 friend const QObject *QtPrivate::getQObject(const QObjectPrivate *d); \
107 template <typename ObjPrivate> friend void QtPrivate::assertObjectType(QObjectPrivate *d);
109#define Q_D(Class) Class##Private * const d = d_func()
110#define Q_Q(Class) Class * const q = q_func()
122#define Q_DECLARE_SHARED(TYPE) \
123Q_DECLARE_TYPEINFO(TYPE, Q_RELOCATABLE_TYPE); \
124inline void swap(TYPE &value1, TYPE &value2) \
125 noexcept(noexcept(value1.swap(value2))) \
126{ value1.swap(value2); }
Combined button and popup list for selecting options.
void assertObjectType(QObjectPrivate *d)
const QObject * getQObject(const QObjectPrivate *d)
static ControlElement< T > * ptr(QWidget *widget)