在Qt设计师中集成自定义部件

**

在Qt设计师中集成自定义部件

**在Qt设计师中有两种方法可以集成自定义部件。改进法和插件法。
改进法是相对简单的方法。在这里以QSpinBox为例。
一 、改进法
具体的操作方法如下:
1、从Qt设计师的窗口部件中拖动一个QSpinBox到窗体中,由此创建了一个QSpinBox。
2 在窗体中单击这个QSpinBox,右键点击弹出上下文菜单。选择提升为,设置基类名称,和头文件名称。在ui文件中会包含此头文件和一个创建的对象。使用这种方法可以很方便的修改基类中的属性,但是对那些自定义的属性却是难以修改。此时,推荐使用插件法。
2 在这里插入图片描述
二 插件法:
插件法需要创建一个插件库。Qt设计师可以在运行时加载这个库。并且可以用该库创建窗口部件的实例。
在使用这种方法时,需要子类化QDesignerCustomWidgetInterface,并且需要重写一些虚函数。QDesignerCustomWidgetInterface这个类提供了一些插件化窗口部件的接口。在实现接口的时候,我们需要使用Q_INTERFACES() 宏通知元对象系统,哪个接口被实现。例如:

 class BasicToolsPlugin : public QObject,
                          public BrushInterface,
                          public ShapeInterface,
                          public FilterInterface
  {
      Q_OBJECT
      Q_INTERFACES(BrushInterface ShapeInterface FilterInterface)
  public:
      ...
  };

```handlebars
//利用给定对象创建该窗口部件类的一个实例
virtual QWidget *createWidget(QWidget *parent) = 0;
//返回自定窗口部件应该属于的窗口部件工具箱群组的名字
virtual QString group() const = 0;
//返回窗口图标
virtual QIcon icon() const = 0;
//返回包含文件的名称
virtual QString includeFile() const = 0;
virtual void initialize(QDesignerFormEditorInterface *formEditor);
//该窗口部件是否可以包含其他窗口部件
virtual bool isContainer() const = 0;
//初始化状态
virtual bool isInitialized() const;
//返回窗口部件的名字
virtual QString name() const = 0;
//返回工具箱提示信息
virtual QString toolTip() const = 0;
//返回用于Qt设计师中的“what's This”中显示的文本
virtual QString whatsThis() const = 0;

当Qt设计师加载一个地址窗口部件时,会调用initialize函数在构建一些需要的资源.通过createWidget创建自定义部件的实例。使Q_PLUGIN_METADATA()将自定义的窗口部件导入到设计师。这个宏用于声明元数据,元数据是实例化此对象的插件的一部分。宏需要声明通过对象实现的接口的IID,并引用一个包含插件元数据的文件。在Qt插件的源代码中应该正好有一个这个宏。
这个宏保证了Qt设计师能够创建和访问这个自定义的窗口部件。没有这个红宏的话,qt设计师没法使用它。
例如:

 class MyInstance : public QObject
  {
      Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDummyPlugin" FILE "mymetadata.json")
  };

此次就先到这里,后续会继续完善!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值