(36)自定义属性举例:
++ 以及:
++ 宏 Q_CLASSINFO ( , ) 类的附加信息:
++这段代码,老师没有演示。我自己写的总是报错。算了,没心力建完整的项目去摸索研究了。老师说后面有完整的复杂的项目,以后再有机会验证这些知识。谢谢。
(37)3.3.4 信号与槽:connect()函数原型:
++继续:
(38)模板函数 qOverload《Args…》( & C :: func ), 谢谢文心 :
#ifdef Q_QDOC
// Just for documentation generation
//看注释, if 分支仅用于文件生成,看来要学习 #else 分支
template<typename T>
auto qOverload(T functionPointer);
template<typename T>
auto qConstOverload(T memberFunctionPointer);
template<typename T>
auto qNonConstOverload(T memberFunctionPointer);
#else
template <typename... Args> //args... 是成员函数的参数类型包
struct QNonConstOverload //适用于类的非 const 成员函数
{ // R应该是函数指针类型,T 是类类型
template <typename R, typename T> //重载了()运算符,使本对象类似于模板函数
constexpr auto operator()(R (T::*ptr)(Args...))
const noexcept -> decltype(ptr)
{ return ptr; } //这是本类的动态成员函数,依附于类对象的存在
template <typename R, typename T> //本类的静态成员函数,不依附于类对象的存在
static constexpr auto of(R (T::*ptr)(Args...))
noexcept -> decltype(ptr)
{ return ptr; }
};
template <typename... Args>
struct QConstOverload // 本类适合于类 T 里的 const 成员函数
{
template <typename R, typename T> //重载 ( ) 运算符
constexpr auto operator()(R (T::*ptr)(Args...) const)
const noexcept -> decltype(ptr)
{ return ptr; }
template <typename R, typename T> //看来 of( ) 的作用更大
static constexpr auto of(R (T::*ptr)(Args...) const)
noexcept -> decltype(ptr)
{ return ptr; }
};
template <typename... Args>
struct QOverload : QConstOverload<Args...>, QNonConstOverload<Args...>
{
using QConstOverload<Args...>::of; //使父类中的这四个函数可见
using QConstOverload<Args...>::operator();
using QNonConstOverload<Args...>::of;
using QNonConstOverload<Args...>::operator();
template <typename R> //ptr 指针指向的函数是普通函数,不再是类的成员函数
constexpr auto operator()(R (*ptr)(Args...))
const noexcept -> decltype(ptr)
{ return ptr; }
template <typename R>
static constexpr auto of(R (*ptr)(Args...))
noexcept -> decltype(ptr)
{ return ptr; }
};
//以下看起来像是全局的模板变量定义,且使变量名等同于模板类名。
//此类变量实际是类对象,全局的类对象,才可以以后使用其 ( ) 运算符函数。
template <typename... Args> constexpr inline
QOverload<Args...> qOverload = {}; // ={} 意思是变量的初始化采用默认值,没啥用
//虽然定义了三个全局变量,但还是上面的 qOverload 对象最强大
template <typename... Args> constexpr inline
QConstOverload<Args...> qConstOverload = {};
template <typename... Args> constexpr inline
QNonConstOverload<Args...> qNonConstOverload = {};
#endif
++以下给出文心的教导:
(39)
谢谢