每次使用Qt进行编写好自定义控件后,还需要编写Desginer设计器使用的插件。才能够提供给Designer设计器使用,过程比较繁琐,工作量也比较大,不够灵活。本文介绍怎样使用之前技术博文提及到的动态创建技术实现脚本化管理Designer自定义控件插件。
首先介绍下管理脚本文件结构
libs节点:自定义控件库集合;
directory属性:表示自定义控件库的存储路径;
lib节点:描述一个自定义控件库;
name节点:自定义控件库名称;
method节点:控件创建方法入口;
controls节点:控件集合;
control节点:描述一个控件;
name属性:控件名称;
container节点:是否为容器;
icon节点:Designer设计器中显示控件图标描述;
directory属性:图标存储路径;
name节点:图标名称;
doxml节点:控件默认ui的描述信息;
脚本解析类声明如下:
class DomControls;
class DomLibs;
class DomControl;
class DomLib;
class DomInclude;
class DomIcon;
class DomDomXml;
class DomName;
class DomContainer;
class DomCollections
{
public:
DomCollections();
~DomCollections();
void read(const QDomElement& node);
void setElementLibs(DomLibs* libs);
void setElementControls(DomControls* controls);
DomControls *elementControls()const;
DomLibs *elementLibs()const;
void setAttributeVersion(const QString& version);
QString attributeVersion()const;
bool hasAttributeVersion()const;
void clearAttributeVersion();
private:
QString m_attr_version;
bool m_has_attr_version;
DomControls* m_controls;
DomLibs* m_libs;
};
class DomLibs{
public:
DomLibs();
~DomLibs();
void read(const QDomElement& node);
void setElementLib(DomLib* lib);
QList<DomLib *> elementLib()const;
void setAttributeDirectory(const QString& dir);
QString attributeDirectory()const;
bool hasAttributeDirectory()const;
void clearAtrributeDirectory();
private:
QString m_attr_directory;
bool m_has_attr_directory;
QList<DomLib*> m_libs;
};
class DomControls{
public:
DomControls();
~DomControls(