您现在的位置是:网站首页> C/C++
QT根据类名动态创建类
- C/C++
- 2021-04-18
- 900人已阅读
摘要
QT根据类名动态创建类,可能是由于内容开始是网络地址(http://...)完整的英文词截取后不能换行造成 为避免代码造成手机端排版的混乱,可适当增加文字描述,将代码往后推移
基类
class
Parser {
public
:
virtual
void
parse() = 0;
virtual
~Parser() {};
};
两个子类
class
Parser1 :
public
Parser {
public
:
Parser1() {
qDebug() <<
"Parser1::Parser1()"
;
}
void
parse() {
qDebug() <<
"Parser1::parse()"
;
}
~Parser1() {
qDebug() <<
"Parser1::~Parser1()"
;
}
};
Q_DECLARE_METATYPE(Parser1)
class
Parser2 :
public
Parser {
public
:
Parser2() {
qDebug() <<
"Parser2::Parser2()"
;
}
void
parse() {
qDebug() <<
"Parser2::parse()"
;
}
~Parser2() {
qDebug() <<
"Parser2::~Parser2()"
;
}
};
Q_DECLARE_METATYPE(Parser2)
类工厂
class
Parser1 :
public
Parser {
public
:
Parser1() {
qDebug() <<
"Parser1::Parser1()"
;
}
void
parse() {
qDebug() <<
"Parser1::parse()"
;
}
~Parser1() {
qDebug() <<
"Parser1::~Parser1()"
;
}
};
Q_DECLARE_METATYPE(Parser1)
class
Parser2 :
public
Parser {
public
:
Parser2() {
qDebug() <<
"Parser2::Parser2()"
;
}
void
parse() {
qDebug() <<
"Parser2::parse()"
;
}
~Parser2() {
qDebug() <<
"Parser2::~Parser2()"
;
}
};
Q_DECLARE_METATYPE(Parser2)
使用
int
main (
int
argc,
char
* argv[] )
{
qRegisterMetaType<Parser1>(
"Parser1"
);
qRegisterMetaType<Parser2>(
"Parser2"
);
qDebug() <<
"###### Trying create Parser1"
;
factory(
"Parser1"
);
qDebug() <<
"###### Trying create Parser2"
;
factory(
"Parser2"
);
}