自定义控件时-添加多个控件到一组中
Posted 卡贝天师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义控件时-添加多个控件到一组中相关的知识,希望对你有一定的参考价值。
dmwidgetinterface.h
1 #ifndef _DM_WIDGET_INTERFACE_H_ 2 #define _DM_WIDGET_INTERFACE_H_ 3 4 5 #include <QDesignerCustomWidgetInterface> 6 7 8 // DM自定义控件 9 class DmWidgetInterface : public QObject, public QDesignerCustomWidgetInterface 10 { 11 Q_OBJECT 12 Q_INTERFACES(QDesignerCustomWidgetInterface) 13 14 public: 15 DmWidgetInterface(const QString& className, QObject* parent = 0); 16 virtual ~DmWidgetInterface(); 17 18 // 控件在Designer中显示的图标 19 virtual QIcon icon() const; 20 21 // 控件在Designer中显示的名称 22 virtual QString name() const; 23 24 // 控件在Designer中所在的组名称 25 virtual QString group() const; 26 27 // 控件在.ui文件中的默认描述 28 virtual QString domXml() const; 29 30 // 控件在Designer中鼠标悬浮时的提示信息 31 virtual QString toolTip() const; 32 virtual QString whatsThis() const; 33 34 // 控件是否是一个容器类控件,可以包容其他控件 35 virtual bool isContainer() const; 36 37 private: 38 // 类名 39 QString className; 40 }; 41 42 43 // 生成控件接口类 44 #define DECLARE_WIDGET_INTERFACE(WidgetName) 45 46 class WidgetName##Interface : public DmWidgetInterface 47 { 48 Q_INTERFACES(QDesignerCustomWidgetInterface) 49 50 public: 51 WidgetName##Interface(QObject* parent = 0); 52 virtual ~WidgetName##Interface(); 53 54 virtual QString includeFile() const; 55 56 virtual QWidget* createWidget(QWidget* parent); 57 }; 58 59 60 // 实现控件接口类 61 #define IMPLEMENT_WIDGET_INTERFACE(WidgetName, IncludeFile) 62 63 WidgetName##Interface::WidgetName##Interface(QObject* parent) : DmWidgetInterface(#WidgetName, parent) 64 { 65 66 } 67 68 WidgetName##Interface::~WidgetName##Interface() 69 { 70 71 } 72 73 QString WidgetName##Interface::includeFile() const 74 { 75 return (IncludeFile); 76 } 77 78 QWidget* WidgetName##Interface::createWidget(QWidget* parent) 79 { 80 return new WidgetName(parent); 81 } 82 83 84 #endif // _DM_WIDGET_INTERFACE_H_
dmwidgetinterface.cpp
1 #include "dmwidgetinterface.h" 2 3 4 DmWidgetInterface::DmWidgetInterface(const QString& name, QObject* parent) 5 : QObject(parent), className(name) 6 { 7 8 } 9 10 DmWidgetInterface::~DmWidgetInterface() 11 { 12 13 } 14 15 // 控件在Designer中显示的图标 16 QIcon DmWidgetInterface::icon() const 17 { 18 return QIcon(); 19 } 20 21 // 控件在Designer中显示的名称 22 QString DmWidgetInterface::name() const 23 { 24 return this->className; 25 } 26 27 // 控件在Designer中所在的组名称 28 QString DmWidgetInterface::group() const 29 { 30 return "DmWidgets"; 31 } 32 33 // 控件在.ui文件中的默认描述 34 QString DmWidgetInterface::domXml() const 35 { 36 return QDesignerCustomWidgetInterface::domXml(); 37 } 38 39 // 控件在Designer中鼠标悬浮时的提示信息 40 QString DmWidgetInterface::toolTip() const 41 { 42 return ""; 43 } 44 45 QString DmWidgetInterface::whatsThis() const 46 { 47 return ""; 48 } 49 50 // 控件是否是一个容器类控件,可以包容其他控件 51 bool DmWidgetInterface::isContainer() const 52 { 53 return false; 54 }
dmwidgetinterfaces.cpp
#include <QtCore/QtPlugin> #include "dmtexteditinterface.h" DmWidgetInterfaces::DmWidgetInterfaces(QObject* parent) : QObject(parent) { // 多行文本输入 this->widgets.append(new DmTextEditInterface(this)); } DmWidgetInterfaces::~DmWidgetInterfaces() { } // 控件列表 QList<QDesignerCustomWidgetInterface*> DmWidgetInterfaces::customWidgets() const { return this->widgets; } Q_EXPORT_PLUGIN(DmWidgetInterfaces)
dmtextedit.h
#ifndef _DM_TEXT_EDIT_H #define _DM_TEXT_EDIT_H #include <QtGui/QTextEdit> #include "libwidgets.h" // 多行输入文本控件 class WIDGETS_EXPORT DmTextEdit : public QTextEdit { Q_OBJECT public: DmTextEdit(QWidget* parent = 0); virtual ~DmTextEdit(); }; #endif
dmtexteditinterface.cpp
1 #include "dmtextedit.h" 2 #include "dmtexteditinterface.h" 3 4 5 // 多行输入文本控件 6 IMPLEMENT_WIDGET_INTERFACE(DmTextEdit, "dmtextedit.h")
dmtexteditinterface.h
1 #ifndef _DM_TEXTEDIT_INTERFACE_H_ 2 #define _DM_TEXTEDIT_INTERFACE_H_ 3 4 5 #include "dmwidgetinterface.h" 6 7 // 多行输入的文本控件 8 DECLARE_WIDGET_INTERFACE(DmTextEdit) 9 10 11 #endif
以上是关于自定义控件时-添加多个控件到一组中的主要内容,如果未能解决你的问题,请参考以下文章
WPF自定义控件,自定义控件中由多个button组成,如何给每个button添加不同事件处理?