**
在Qt设计师中集成自定义部件
**在Qt设计师中有两种方法可以集成自定义部件。改进法和插件法。
改进法是相对简单的方法。在这里以QSpinBox为例。
一 、改进法
具体的操作方法如下:
1、从Qt设计师的窗口部件中拖动一个QSpinBox到窗体中,由此创建了一个QSpinBox。
2 在窗体中单击这个QSpinBox,右键点击弹出上下文菜单。选择提升为,设置基类名称,和头文件名称。在ui文件中会包含此头文件和一个创建的对象。使用这种方法可以很方便的修改基类中的属性,但是对那些自定义的属性却是难以修改。此时,推荐使用插件法。
二 插件法:
插件法需要创建一个插件库。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")
};
此次就先到这里,后续会继续完善!!!