当前位置: 代码迷 >> QT开发 >> QT根据类名动态创建类对象,该如何处理
  详细解决方案

QT根据类名动态创建类对象,该如何处理

热度:489   发布时间:2016-04-25 05:11:45.0
QT根据类名动态创建类对象
Q_OBJECT宏定义定义了QObject的子类的元信息类对象,但是QObject好像没有注册所有子类的信息,那么在QT中该如何实现根据类名动态创建QObject子类的对象呢?

------解决方案--------------------
让MyObject继承自QObject
MyObject::staticMetaObject.newInstance()
构造函数前需加上Q_INVOKABLE
------解决方案--------------------
其实可以不用 Q_INVOKABLE

首先 有一个基类 可以使用 QObject, 这里使用 Parser
C/C++ code
class Parser {public: virtual void parse() = 0; virtual ~Parser() {};};
------解决方案--------------------
探讨

QWidget是可以通过"QWidget*"进行创建的。
QObject也可以通过"QObject*"来创建,这两个是QT已经注册过的,别的QObject子类就不行了。

另外直接delete可能有隐患,除非每次QT更新你都去看源代码并确信他没有改变内部实现,否则还是应该使用destroy

------解决方案--------------------
探讨

QObject子类是注册不了的。。。

------解决方案--------------------
C/C++ code
#include <QApplication>#include <QMetaMethod>#include <iostream>using namespace std;class Test:public QObject{    Q_OBJECTpublic:    Q_INVOKABLE Test();    Q_INVOKABLE void print();};Test::Test(){        cout<<"Test::Test()"<<endl;}void Test::print(){    cout<<"sss\n"<<endl;}#include "test.moc"int main(int argc,char* argv[]){     QApplication app(argc,argv);     QMetaObject metaObject = Test::staticMetaObject;     Test* object = (Test*)metaObject.newInstance();     object->print();     return app.exec();}
  相关解决方案