自定义部件: Qt Designer可以使用插件机制来显示自定义部件. 可以将自定义部件集成到Qt Designer
中, 有两种方法可以进行集成:
提升控件(Promote to..): 在Qt Designer中设计窗口时,可以使用控件占位符来代替自定义控件.
将一个和自定义控制最接近的控件,通常为自定义控件所继承的QT标准控件, 如果没有合适的可
以使用QWidget做通用替代. 然后在占位控件的右键菜单上选择"Promote to"提升为自定义控
件. 在弹出的窗口中设置自定义控件的类名和要包含的头文件就行了. 提升法的却点是不能在
QT Designer中设置控件特有的属性和绘制自己.
插件法: 要在Qt Designer中使用控件插件, 需要一个继承自QDesignerCustomWidgetInterface
的类并实现相应的方法的控件构造器. 然后将控件和构造器创建为动态库. 插件编辑好后放到
Qt Designer的插件目录就能在Designer中使用了. 也可以使
用QDesignerCustomWidgetCollectionInterface一次性创建多个控件的信息.这里面要注意
的是domXml()函数, 这个函数需要返回一个.ui文件的片段来告诉QT Desiger创建自定义控件
的一些信息;
插件需求: 要使插件能在所有的平台下都能工作, 插件需要导出一些Qt Designer需要的符号,
首先就使用Q_EXPORT_PLUGIN2()宏声明插件的名字和类, 然后每一个插件类都要在声明
中使用QDESIGNER_WIDGET_EXPORT宏
创建自定义控件插件
要使自己的控件向QT原生控件样能在Qt Designer中使用, 需要做如下的工作:
#include <QtDesigner/QDesignerExportWidget> //包含头文件
class QDESIGNER_WIDGET_EXPORT MyWidget : public QWidget //声明自己的控件类控制的实现
{...} //根普通的一样
在定义一个插件类来包装我们的控件:
//文件文件MyWdigetPlugin.h
#include <QDesignerCustomWidgetInterface>
class MyWidgetPlugin: public QObject ,public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface) //声明这是一个插件的实现
...
}
//然后在MyWidgetPlugin.cpp中实现QDesignerCustomWidgetInterface中的接口函数就行了
注: 要使Qt Designer能加载插件, 必须以release编译, 然后将库复制到QT安装目录的plugins/designer下;
不知为何, 控件用ui文件自动创建的,不能在Designer中显示出自定义控件的内容,而在paintEvent事件中使用QPainter直接绘制的,或在构造函数中动态创建的则都能显示.原因已找到,是因为没有调用setupUi().
联系客服