子Qt设计师中集成自定义窗口部件
改进法(promotion):
通过选择一个类似的内置的Qt窗口部件
插件法(plugin):
iconeditorplugin.h
#ifndef ICONEDITORPLUGIN_H #define ICONEDITORPLUGIN_H #include <QDesignerCustomWidgetInterface> class IconEditorPlugin : public QObject, public QDesignerCustomWidgetInterface { Q_OBJECT Q_INTERFACES(QDesignerCustomWidgetInterface) //使用Q_INTERFACES()宏通知moc:: 这里的QDesignerCustomWidgetInterface是一个插件接口 public: IconEditorPlugin(QObject *parent = 0); QString name() const; QString includeFile() const; QString group() const; QIcon icon() const; QString toolTip() const; QString whatsThis() const; bool isContainer() const; QWidget *createWidget(QWidget *parent); }; #endif
iconeditorplugin.cpp
#include <QtPlugin> #include "../iconeditor/iconeditor.h" #include "iconeditorplugin.h" IconEditorPlugin::IconEditorPlugin(QObject *parent) : QObject(parent) { } QString IconEditorPlugin::name() const { return "IconEditor"; } QString IconEditorPlugin::includeFile() const { return "iconeditor.h"; } QString IconEditorPlugin::group() const { return tr("Image Manipulation Widgets"); } QIcon IconEditorPlugin::icon() const { return QIcon(":/images/iconeditor.png"); } QString IconEditorPlugin::toolTip() const { return tr("An icon editor widget"); } QString IconEditorPlugin::whatsThis() const { return tr("This widget is presented in Chapter 5 of <i>C++ GUI " "Programming with Qt 4</i> as an example of a custom Qt " "widget."); } bool IconEditorPlugin::isContainer() const { return false; } QWidget *IconEditorPlugin::createWidget(QWidget *parent) { return new IconEditor(parent); } Q_EXPORT_PLUGIN2(iconeditorplugin, IconEditorPlugin) //必须的,使Qt设计师中能够使用这个插件,第一参数是希望给插件的名字,第二个参数是实现该插件类的名字
iconeditorplugin.pro
TEMPLATE = lib CONFIG += designer plugin release HEADERS = ../iconeditor/iconeditor.h \ iconeditorplugin.h SOURCES = ../iconeditor/iconeditor.cpp \ iconeditorplugin.cpp RESOURCES = iconeditorplugin.qrc DESTDIR = $$[QT_INSTALL_PLUGINS]/designer //QT_INSTALL_PLUGINS保存了指向Qt安装目录种plugins目录所在的路径