Qt Designer 的插件的编写

我这个人比较懒,不爱写代码的,就想干脆把自己的控件集成到Qt designer 算了,于是翻翻资料看了看就写了一个实验一下:

我的IDE就是VS2008+qt-vs-addin-1.1.2;Qt v4.6.

 

我这个是一个继承的QGLWidget的话opengl的Widget控件。

主要有4个文件,其他都是编译器生成的。

 axglwidget就是我的opengl的Widget控件,现在需要写个axglwidgetplugin实现 QDesignerCustomWidgetInterface   来告诉designer我的axglwidget的一些属性,这样designer就可以知道我的axglwidget。

 

首先你需要建立一个qt的dll工程,由于我的需要GUI和opengl,在Qt工程向导是你要在gui,opengl上选勾。工程名为axglwidgetplugin。

 

其他文件如下

 

 

 

 axglwidget.h

#ifndef AXGLWIDGET_H #define AXGLWIDGET_H #include class AXGLWidget:public QGLWidget { public: AXGLWidget(QWidget* parent=0); ~AXGLWidget(); void glInit(); void glDraw(); private: }; #endif // AXGLWIDGET_H

 

axglwidgetplugin.h

#ifndef AXGLWIDGETPLUGIN_H #define AXGLWIDGETPLUGIN_H #include #include "axglwidgetplugin_global.h" #include #include #include "axglwidget.h" class AXGLWIDGETPLUGIN_EXPORT AXGLWidgetPlugin: public QObject, public QDesignerCustomWidgetInterface { Q_OBJECT // 必须 Q_INTERFACES(QDesignerCustomWidgetInterface) // 必须 public: QString name() const; // 返回由该插件提供的窗口控件的名字 QString includeFile() const; // 返回由该插件封装的特定窗口控件的头文件的名称. 这个头文件会包含在由uic生成的代码中 QString group() const; // 返回自定义的窗口控件所属于的在QtDesigner里的组名, 如果QtDesigner没有则会自动创建 QIcon icon() const; // 自定义控件在QtDesigner的图标 QString toolTip() const; // 控件的"提示" QString whatsThis() const; // 控件的"这是什么" bool isContainer() const; // 控件是否包含其他控件,如果有则返回true,否则返回false QWidget *createWidget(QWidget *parent); // QtDesigner会调用这个函数创建自定义控件,返回创建的(C++中可能是new)自定义控件即可 public: AXGLWidgetPlugin(QObject *parent = 0); // 构造函数,一般使其调用父类QObject的构造函数即可 ~AXGLWidgetPlugin(); private: }; #endif // AXGLWIDGETPLUGIN_H   

 

 

axglwidget.cpp

#include "axglwidget.h" AXGLWidget::AXGLWidget(QWidget* parent) :QGLWidget(parent) { } AXGLWidget::~AXGLWidget() { } void AXGLWidget::glInit() { QGLWidget::glInit(); } void AXGLWidget::glDraw() { }

 

axglwidgetplugin.cpp

 #include "axglwidgetplugin.h" QString AXGLWidgetPlugin::name() const // 返回由该插件提供的窗口控件的名字 { return "AXGLWidget"; } QString AXGLWidgetPlugin::includeFile() const // 返回由该插件封装的特定窗口控件的头文件的名称. 这个头文件会包含在由uic生成的代码中 { return "axglwidget.h"; } QString AXGLWidgetPlugin::group() const // 返回自定义的窗口控件所属于的在QtDesigner里的组名, 如果QtDesigner没有则会自动创建 { return tr("Display Widgets"); } QIcon AXGLWidgetPlugin::icon() const // 自定义控件在QtDesigner的图标 { return QIcon(":/Icon/ico.png"); } QString AXGLWidgetPlugin::toolTip() const // 控件的"提示" { return tr("An OpenGL Widget"); } QString AXGLWidgetPlugin::whatsThis() const // 控件的"这是什么" { return tr("This is an OpenGL Widget."); } bool AXGLWidgetPlugin::isContainer() const // 控件是否包含其他控件,如果有则返回true,否则返回false { return false; } QWidget* AXGLWidgetPlugin::createWidget(QWidget *parent) // QtDesigner会调用这个函数创建自定义控件,返回创建的(C++中可能是new)自定义控件即可 { return new AXGLWidget(parent); } AXGLWidgetPlugin::AXGLWidgetPlugin(QObject *parent ) :QObject(parent) { } AXGLWidgetPlugin::~AXGLWidgetPlugin() { } Q_EXPORT_PLUGIN2 (AXGLWidgetPlugin, AXGLWidgetPlugin) /*Qt的插件的宏。据书上说要写在最后,第一个参数是你的插件.dll前的文件名(This macro exports the plugin class ClassName for the plugin specified by PluginName. The value of PluginName should correspond to the TARGET specified in the plugin's project file.)帮助上是这么说的。第二个参数是你插件的类名*/

 

全部写完了编译一次,把编译出来的.dll和.lib复制到“Qt/4.6.0/plugins/designer”这是我的Qt的目录,然后打开designer就会看到多了个名字叫“AXGLWidget”的东东了。

 

源代码放在csdn我的资源里面“Qt Designer 的插件的编写”的东西 http://download.csdn.net/source/2007150

 

你可能感兴趣的:(Qt)