QObject宏的解析
来源:互联网 发布:photoshop cs6破解mac 编辑:程序博客网 时间:2024/05/17 23:22
学习QObject的宏帮助我们更方便的利用Qt的元对象的技术,下面开始分析。
Q_CLASSINFO(“”,“”)
这个宏用来注册该类的信息,当我们希望从这个类获得我们想要的信息的时候,
就可以利用元对象类使用起来很方便,如:
q_ptr指向集成QObject的一个类
该类注册了这个信息
Q_CLASSINFO(“Author”,"aaaa")
int index = q_ptr->metaObject()->indexOfClassInfo("Author");
QString ss = q_ptr->metaObject()->classInfo(index).value();
我们可以获得这个注册信息了。
如果我们想获得类的名称也可以通过元对象获得
QString name = q_ptr->metaObject()->className();
这个技术用于插件加载很有用,(设计图元工厂的时候能用到哦)。
Q_DISABLE_COPY(classname)
这个宏用于注册一个类将拷贝构造函数和重载=操作符设置成私有。
class MyClass : public QObject
{
private:
Q_DISABLE_COPY(MyClass)
};
等价于:
class MyClass : public QObject
{
private:
MyClass(const MyClass &);
MyClass &operator=(const MyClass &);
};
下面这样写编译器也会报错
QWidget w = QWidget();
Q_EMIT ,Q_SIGNALS,Q_SLOTS
我们定义信号槽的时候可以这么写
public slots:
或者Q_SLOTS
官方为跨平台考虑建议我们用Q_SLOTS
有slots,emit,signals这些名字又可能被用于第三方库,所以应避免这么定义,同时我们在pro里定义 CONFIG += no_keywords 它告诉QT不要定义moc关键字signals,slots和emit。
Q_ENUMS:将类中的宏注册到元对象中。
获得宏的值,使用时如:
在类中注册了这样一个宏,q_ptr指向这个类
Q_ENUMS(Edata)enum Edata{eName = 0,eCode = 1,eType = 2,};
for (int i=q_ptr->metaObject()->enumeratorOffset();\i<q_ptr->metaObject()->enumeratorCount();i++){QMetaEnum menum = q_ptr->metaObject()->enumerator(i);QString ss = menum.name();for(int ii=0;ii<menum.keyCount();ii++){QString a = menum.key(ii);}}
这个函数把所有宏的名称和宏的值代表的名称全部显示
Q_FLAGS():这个宏和Q_ENUMS是一样的,但是如果你两个都用,就会注册两个对象。
Q_INTERFACES():这个宏告诉Qt接口类的实现,用于插件
class BasicToolsPlugin : public QObject,
public BrushInterface,
public ShapeInterface,
public FilterInterface
{
Q_OBJECT
Q_INTERFACES(BrushInterface ShapeInterface FilterInterface)
public:
...
};
Q_INVOKABLE注册成员数到元对象中,可以通过元对象进行调用。
- QObject宏的解析
- paip. 'QObject::QObject(const QObject&)' is private问题的解决.
- QObject 的线程关联性
- QObject
- QObject
- 无法解析的外部符号 "public: __thiscall BasePlugin::BasePlugin(class QObject *)"
- QThread 与 QObject的关系
- QThread 与 QObject的关系
- QObject 的构建/销毁顺序
- QObject的Thread Affinity翻译
- QObject 的拷贝构造和赋值操作
- QT笔记:QObject::sender()的用法
- QT QObject::connect函数的学习
- 使用Qt的QObject类实现多叉树
- QObject的拷贝与赋值操作
- QT学习:QObject::sender()的用法
- Qt中QObject::sender()的用法
- QT QObject::connect函数的学习
- 第十四天:可以下载安装了
- poj 1743 Musical Theme(最长不重叠重复子串 后缀数组+二分)
- 希尔排序
- flex HttpService请求
- selenium webdriver学习(十二)------------如何利用selenium-webdriver截图
- QObject宏的解析
- 十五、在应用程序中使用虚拟内存
- CAPWAP主页文档下载
- 在ServletContextListener实现类中获取spring注入对象
- Zimbra服务无法正常启动
- RemoatObject请求
- spring @Autowired @Qualifier
- flex饼图
- android布局中更换控件顺序后无法正常运行的解决办法