概述
Macro
#define 定义某个宏
延伸下一行
## 连接两个字符
当前分页 大多都是 d_ptr q_ptr 相关
两个基础的模板
template <typename T> static inline T *qGetPtrHelper(T *ptr) { return ptr; }
template <typename Wrapper> static inline typename Wrapper::pointer qGetPtrHelper(const Wrapper &p) { return p.data(); }
Q_DECLARE_PRIVATE
- 提供了一组 d_func() 函数,这样 不管是 const 对象 还是非const对象 都可以使用
- 这个一般在 API类中 使用, 这样构成了 class -> private class 的使用关系
#define Q_DECLARE_PRIVATE(Class)
inline Class##Private* d_func() { return reinterpret_cast<Class##Private * >(qGetPtrHelper(d_ptr)); }
inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private * >(qGetPtrHelper(d_ptr)); }
friend class Class##Private;
展开示例
Q_DECLARE_PRIVATE(QListView)
//--> 展开成:
// d_ptr 在QObject中: QScopedPointer<QObjectData> d_ptr;
inline QListViewPrivate* d_func() {
return reinterpret_cast<QListViewPrivate* > qGetPtrHelper(d_ptr);
}
inline const QListViewPrivate* d_func() const {
return reinterpret_cast<QListViewPrivate* > qGetPtrHelper(d_ptr);
}
friend class QListViewPrivate;
Q_DECLARE_PRIVATE_D
#define Q_DECLARE_PRIVATE_D(Dptr, Class)
inline Class##Private* d_func() { return reinterpret_cast<Class##Private * >(Dptr); }
inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private * >(Dptr); }
friend class Class##Private;
Q_DECLARE_PUBLIC
- 和上面的一样
- 不同的是,这个在 private class 中使用, 构成了private class --> class 的使用关系
#define #define Q_DECLARE_PUBLIC(Class)
inline Class* q_func() { return static_cast<Class * >(q_ptr); }
inline const Class* q_func() const { return static_cast<const Class * >(q_ptr); }
friend class Class;
展开示例
Q_DECLARE_PUBLIC(QListView)
//--> 展开成:
//QObjectData 中有 q_ptr: QObject * q_ptr;
inline QListView* q_func() {
return static_cast<QListView* >(q_ptr);
}
inline const QListView* q_func() const{
return static_cast<QListView* >(q_ptr);
}
friend class QListView;
Q_D
简化使用 d_ptr
#define Q_D(Class) Class##Private * const d = d_func()
Q_Q
#define Q_Q(Class) Class * const q = q_func()
简化使用 q_ptr
Q_ENUM
Q_PROPERTY
QT_REQUIRE_CONFIG
/*
The QT_CONFIG macro implements a safe compile time check for features of Qt.
Features can be in three states:
0 or undefined: This will lead to a compile error when testing for it
-1: The feature is not available
1: The feature is available
*/
#define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1)
#define QT_REQUIRE_CONFIG(feature) Q_STATIC_ASSERT_X(QT_FEATURE_##feature == 1, "Required feature " #feature " for file " __FILE__ " not available.")
QT_BEGIN_NAMESPACE
直接可以使用 namespace
# define QT_BEGIN_NAMESPACE namespace QT_NAMESPACE {
# define QT_END_NAMESPACE }
最后
以上就是外向往事为你收集整理的记录一下Qt的宏Macro的全部内容,希望文章能够帮你解决记录一下Qt的宏Macro所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复