Qt5.5中类反射试验
来源:互联网 发布:破解下载软件 编辑:程序博客网 时间:2024/05/29 00:32
网络上下载的类:
#ifndef OBJECTFACTORY_H
#define OBJECTFACTORY_H
class ObjectFactory
{
public:
template<typename T>
static void registerClass()
{
constructors().insert( T::staticMetaObject.className(), &constructorHelper<T> );
}
static QObject* createObject( const QByteArray& className, QObject* parent = NULL )
{
Constructor constructor = constructors().value( className );
if ( constructor == NULL )
return NULL;
return (*constructor)( parent );
}
private:
typedef QObject* (*Constructor)( QObject* parent );
template<typename T>
static QObject* constructorHelper( QObject* parent )
{
return new T( parent );
}
static QHash<QByteArray, Constructor>& constructors()
{
static QHash<QByteArray, Constructor> instance;
return instance;
}
};
#endif // OBJECTFACTORY_H
自己建立的测试类:
#ifndef CDXOBJECT_H
#define CDXOBJECT_H
#include <QObject>
#include "QString"
class CdxObject : public QObject
{
Q_OBJECT
public:
QString m_sName;
public:
explicit CdxObject(QObject *parent = 0);
signals:
public slots:
};
class CdxDrawObject : public CdxObject
{
Q_OBJECT
public:
explicit CdxDrawObject(QObject* parent);
signals:
public slots:
};
class CdxNetworkObject : public CdxObject
{
Q_OBJECT
public:
explicit CdxNetworkObject(QObject* parent);
signals:
public slots:
};
#endif // CDXOBJECT_H
//cdxobject.cpp
#include "cdxobject.h"
CdxObject::CdxObject(QObject *parent) : QObject(parent)
{
m_sName="root object";
}
CdxDrawObject::CdxDrawObject(QObject* parent)
{
m_sName="draw object";
}
CdxNetworkObject::CdxNetworkObject(QObject* parent)
{
m_sName="network object";
}
//调用测试
#include "cdxobject.h"
#include "objectfactory.h"
void MainWindow::on_pushButton_clicked()
{
ObjectFactory::registerClass<CdxObject>();
ObjectFactory::registerClass<CdxDrawObject>();
ObjectFactory::registerClass<CdxNetworkObject>();
//CdxObject* object = (CdxObject*)ObjectFactory::createObject( "CdxObject" );
//CdxObject* object = (CdxObject*)ObjectFactory::createObject( "CdxDrawObject" );
CdxObject* object = (CdxObject*)ObjectFactory::createObject( "CdxNetworkObject" );
ui->lineEdit->setText(object->m_sName);
}
#ifndef OBJECTFACTORY_H
#define OBJECTFACTORY_H
class ObjectFactory
{
public:
template<typename T>
static void registerClass()
{
constructors().insert( T::staticMetaObject.className(), &constructorHelper<T> );
}
static QObject* createObject( const QByteArray& className, QObject* parent = NULL )
{
Constructor constructor = constructors().value( className );
if ( constructor == NULL )
return NULL;
return (*constructor)( parent );
}
private:
typedef QObject* (*Constructor)( QObject* parent );
template<typename T>
static QObject* constructorHelper( QObject* parent )
{
return new T( parent );
}
static QHash<QByteArray, Constructor>& constructors()
{
static QHash<QByteArray, Constructor> instance;
return instance;
}
};
#endif // OBJECTFACTORY_H
自己建立的测试类:
#ifndef CDXOBJECT_H
#define CDXOBJECT_H
#include <QObject>
#include "QString"
class CdxObject : public QObject
{
Q_OBJECT
public:
QString m_sName;
public:
explicit CdxObject(QObject *parent = 0);
signals:
public slots:
};
class CdxDrawObject : public CdxObject
{
Q_OBJECT
public:
explicit CdxDrawObject(QObject* parent);
signals:
public slots:
};
class CdxNetworkObject : public CdxObject
{
Q_OBJECT
public:
explicit CdxNetworkObject(QObject* parent);
signals:
public slots:
};
#endif // CDXOBJECT_H
//cdxobject.cpp
#include "cdxobject.h"
CdxObject::CdxObject(QObject *parent) : QObject(parent)
{
m_sName="root object";
}
CdxDrawObject::CdxDrawObject(QObject* parent)
{
m_sName="draw object";
}
CdxNetworkObject::CdxNetworkObject(QObject* parent)
{
m_sName="network object";
}
//调用测试
#include "cdxobject.h"
#include "objectfactory.h"
void MainWindow::on_pushButton_clicked()
{
ObjectFactory::registerClass<CdxObject>();
ObjectFactory::registerClass<CdxDrawObject>();
ObjectFactory::registerClass<CdxNetworkObject>();
//CdxObject* object = (CdxObject*)ObjectFactory::createObject( "CdxObject" );
//CdxObject* object = (CdxObject*)ObjectFactory::createObject( "CdxDrawObject" );
CdxObject* object = (CdxObject*)ObjectFactory::createObject( "CdxNetworkObject" );
ui->lineEdit->setText(object->m_sName);
}
0 0
- Qt5.5中类反射试验
- vs2012(vc11)类反射试验
- Qt5中QPrinter类和QPinterDialog类
- vs2013+qt5.5中显示控制台
- QT5中如何使用QFtp类
- Qt5中自带串口类QtSerialPort
- QT5中 类成员变量的初始化
- Qt5.5
- QT中QMainwindow 类与 QWidget类使用 VS2012 QT5.5
- Qt5.5中使用serialport类使得Ui界面很卡
- 试验数据生成器研究中.....
- android中Toast样式试验
- 编译Qt5 Alpha中。。。
- QT5 中使用QPrinter
- QT5 中乱码问题
- 试验
- 试验
- 试验
- JAVASE总结--编码格式
- 一个无脑的FLOYD代码。。。。
- UVA12661
- 51Nod Problem 1004 n^n的末位数字(规律)
- cmd窗口内容如何上下移动查看
- Qt5.5中类反射试验
- 面向对象的lua
- c# winForm 将窗体状态栏StatusStrip 分成左中右三部分
- Objective-C的陷阱与缺陷
- 1、调试会话的可执行文件
- Java学习(3)-可变参数
- UIBezierPath介绍
- android从入门到精通明日科技 光盘
- 同程旅游——Java开发面经