#include "QtFanshe.h"
#include "Animal.h"
QtFanshe::QtFanshe(QWidget* parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(slotfansheBtnClicked()));
}
void QtFanshe::slotfansheBtnClicked()
{
QObject* obj = CreateClassObject("Person");
Animal* an = qobject_cast<Animal*>(obj);
an->setName("Hello");
QString name = an->name();
//
QObject* obj2 = CreateClassObject("Person");
Animal* an2 = qobject_cast<Animal*>(obj2);
an2->setName("nnn");
QString name2 = an2->name();
QString name3 = an->name();
}
void QtFanshe::slotSignalTest()
{
}
QObject* QtFanshe::CreateClassObject(const QString& className)
{
QString classNamePoint = className + "*";
int type = QMetaType::type(classNamePoint.toStdString().c_str());
if (type == 0)
{
return nullptr;
}
const QMetaObject* metaObj = QMetaType::metaObjectForType(type);
QObject* obj = metaObj->newInstance(); //是产生新实例,并非单例。QT的插件dll产生的是单例:QPluginLoader pluginLoader(pluginPath + toolName + ".dll");QObject* tool = pluginLoader.instance();
return obj;
}
Qt 使用QMetaObject实现反射机制代码demo
5星 · 超过95%的资源 需积分: 5 68 浏览量
2022-07-29
15:04:40
上传
评论
收藏 6KB ZIP 举报
Qiuchh
- 粉丝: 60
- 资源: 10
评论10