分享

QT创建自定义窗口部件

 guitarhua 2012-02-11
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().

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多