1.需要创建一个合适的.pro文件
2.创建一个继承QDesignerCustomWidgetInterface的类,描述控件的一些属性.
| 函数 | 描述和返回值 |
| name() | 指定控件的名称 |
| group() | 控件所属的类别 |
| toolTip() | 关于控件的简短描述 |
| whatsThis() | 关于控件的详细描述 |
| includeFile() | 控件使用时必须包含的头文件 |
| icon() | 控件在QTDesigner控件框中显示的图标 |
| isContainer() | 如果可以包含子控件为真,否则为假 |
| createWidget() | 创建控件指针,不过属性不可获得,除非load()加载完成 |
| domXml() | 描述控件的属性 |
| codeTemplate() | 保留函数 |
另外还有两个虚函数需要被重新实现.
| initialize() | 设置自定义控件的扩展,自定义容器和菜单需要设置这个函数 |
| isInitialized() | 如果控件被初始化,返回真,否则返回假 |
3.domXml()函数
domXml()会返回一个UI文件,这个文件被Qt用来创建一个自定义的控件.并包含了控件的相关参数
Qt4.4版本之后,Qt Designer的控件盒子允许使用完整的UI文件描述一个自定义控件.UI文件使用<ui>标签加载,特别是<ui>标签允许添加<customwidget>元素来包含自定义控件的额外信息.当然,如果没有额外信息需要添加,使用标签<widget>已经足够.
如果自定义控件没有提供合适的大小尺寸.必须指定通过类函数domXml()返回的UI数据流中的geometry几何默认大小
关于domXml()函数另一种情况是,这个函数返回一个空的字符串,这个控件不会再Qt Designer显示框中显示出来,但仍然可以被其他窗口控件所使用,这种情况一般适用于隐藏的窗口,
一个完整的自定义控件的设置:
<ui language="c++"> displayname="MyWidget"> <widget class="widgets::MyWidget" name="mywidget"/> <customwidgets> <customwidget> <class>widgets::MyWidget</class> <addpagemethod>addPage</addpagemethod> <propertyspecifications> <stringpropertyspecification name="fileName" notr="true" type="singleline"/> <stringpropertyspecification name="text" type="richtext"/> <tooltip name="text">Explanatory text to be shown in Property Editor</tooltip> </propertyspecifications> </customwidget> </customwidgets> </ui>