QT创建自定义窗口部件 2011年07月22日 星期五 10:58 自定义部件: 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(). |
|