Qt提供了一个Designer界面,使得我们可以自由拖动控件对ui进行布局,但所有的控件都是固定的,如果我们想要自定义一个自己设计的控件,添加到Designer中,可供设计者自由设计。那么可以进行如下操作。

首先新建一个项目,选择其他项目,点击Qt4设计师自定义控件。

然后确定,控件类随便添加一个即可。

创建好后如下图所示:

为了扩展多个控件,我们将lqcfcjx.h和lqcfcjx.cpp文件删除,在其他项目中单独设计,然后并在lqcfcjx.pri中扩展其他项目,Switch是一个单独的项目如下:

//lqcfcjx.pri
include(Switch/Switch.pri)

对于lqcfcjxplugin.h中创建一个自定义控件接口,如下:

#ifndef LQCFCJXPLUGIN_H
#define LQCFCJXPLUGIN_H//插件子项目的头文件
#include"switch.h"#include <QDesignerCustomWidgetInterface>class CustomWidgetInterface: public QObject,public QDesignerCustomWidgetInterface
{Q_OBJECTQ_INTERFACES( QDesignerCustomWidgetInterface )public:CustomWidgetInterface( QObject *parent );virtual bool isContainer() const;virtual bool isInitialized() const;virtual QIcon icon() const;virtual QString codeTemplate() const;virtual QString domXml() const;virtual QString group() const;virtual QString includeFile() const;virtual QString name() const;virtual QString toolTip() const;virtual QString whatsThis() const;virtual void initialize( QDesignerFormEditorInterface * );protected:bool d_isContainer{false};QString d_name;QString d_include;QString d_toolTip;QString d_whatsThis;QString d_domXml;QString d_codeTemplate;QString d_goup = "ysyyrps";QIcon d_icon;private:bool d_isInitialized;
};class CustomWidgetCollectionInterface: public QObject,public QDesignerCustomWidgetCollectionInterface
{Q_OBJECTQ_INTERFACES( QDesignerCustomWidgetCollectionInterface )#if QT_VERSION >= 0x050000Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetCollectionInterface" )#endifpublic:CustomWidgetCollectionInterface( QObject *parent = NULL );virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;private:QList<QDesignerCustomWidgetInterface*> d_plugins;
};//子项目继承
class SwitchInterface: public CustomWidgetInterface
{Q_OBJECTQ_INTERFACES( QDesignerCustomWidgetInterface )public:SwitchInterface( QObject *parent );virtual QWidget *createWidget( QWidget *parent );
};#endif // LQCFCJXPLUGIN_H

具体实现为:

#include "lqcfcjxplugin.h"
#include <QtPlugin>CustomWidgetInterface::CustomWidgetInterface( QObject *parent ):QObject( parent ),d_isInitialized( false )
{
}bool CustomWidgetInterface::isContainer() const
{return d_isContainer;
}bool CustomWidgetInterface::isInitialized() const
{return d_isInitialized;
}QIcon CustomWidgetInterface::icon() const
{return d_icon;
}QString CustomWidgetInterface::codeTemplate() const
{return d_codeTemplate;
}QString CustomWidgetInterface::domXml() const
{return d_domXml;
}QString CustomWidgetInterface::group() const
{return d_goup;
}QString CustomWidgetInterface::includeFile() const
{return d_include;
}QString CustomWidgetInterface::name() const
{return d_name;
}QString CustomWidgetInterface::toolTip() const
{return d_toolTip;
}QString CustomWidgetInterface::whatsThis() const
{return d_whatsThis;
}void CustomWidgetInterface::initialize(QDesignerFormEditorInterface *)
{if ( d_isInitialized )return;d_isInitialized = true;
}CustomWidgetCollectionInterface::CustomWidgetCollectionInterface(QObject *parent ):QObject( parent )
{d_plugins.append(new SwitchInterface(this));
}QList<QDesignerCustomWidgetInterface*>CustomWidgetCollectionInterface::customWidgets( void ) const
{return d_plugins;
}SwitchInterface::SwitchInterface(QObject *parent): CustomWidgetInterface(parent)
{d_name = "Switch";d_include = "switch.h";d_icon = QPixmap( ":/icons/switch.png" );d_isContainer = true;d_domXml ="<widget class=\"Switch\" name=\"switch\">\n"" <property name=\"geometry\">\n""  <rect>\n""   <x>0</x>\n""   <y>0</y>\n""   <width>100</width>\n""   <height>30</height>\n""  </rect>\n"" </property>\n""</widget>\n";}QWidget *SwitchInterface::createWidget(QWidget *parent)
{return new Switch(parent);
}#if QT_VERSION < 0x050000
Q_EXPORT_PLUGIN2(lqcfcjx, lqcfcjxPlugin)
#endif // QT_VERSION < 0x050000

然后点击构建,就会在对应的Debug或Release文件夹下生成对应的dll和lib文件。

然后将lqcfcjx.dll,lqcfcjxd.dll,lqcfcjx.lib,lqcfcjxd.lib文件放到Qt安装的designer目录下即可。如C:\install\Qt\5.14.2\msvc2017\plugins\designer和C:\install\Qt\Tools\QtCreator\bin\plugins\designer。这个是我的Qt的两个目录,然后即可在QtDesigner中使用了。

Qt创建设计师自定义控件(Qt Designer自定义控件)相关推荐

  1. linux qt创建静态库,QT创建与QT无关的纯C++程序和动态/静态库

    QtCreator是一个很好的编写C++程序的工具,我们可以利用其高效的开发IDE来开发纯C++应用程序或动态库,静态库. 一.创建纯C++应用程序 1.新建项目,选择Non-Qt Project,可 ...

  2. 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件

    在使用Qt Designer设计窗体界面时,我们可以使用Widget Box里的窗体控件非常方便的绘制界面,比如拖进去一个按钮,一个文本编辑器等.虽然Qt Designer里的控件可以满足我们大部分的 ...

  3. linux qt 自定义控件,编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件...

    要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:"升级(promo ...

  4. Qt Designer自定义控件创建、使用

    Qt Designer自定义控件创建.使用 如何创建一个自定义的QWidget控件并导入Qt Designer 中进行使用? 一.创建Qt Designer自定义控件 第一步: 创建Qt Design ...

  5. 第七章:Qt设计师使用(designer)

    前情回顾: 第一章:Qt的概述 第二章:在Ubuntu编写第一个Qt程序 第三章:Qt的字符串和字符编码 第四章:Qt的信号和槽 第五章:Qt容器窗口(父窗口) 第六章:面向对象的Qt编程 Qt设计师 ...

  6. QT:Qt设计师的使用 designer

    QT设计师的使用 designer <tips> 源文件/头文件的'最后加空行',有些编译不加空行会报警告. 1. 启动设计师  在命令行 $: designer  根据提示选择模板(父窗 ...

  7. Qt Clion使用飞扬青云的自定义控件

    飞扬青云自定义控件下载 按照对应版本下载自定义控件 修改clion cmake cmake_minimum_required(VERSION 3.15) set(PROJECT_NAME TEST) ...

  8. 04 创建第一个Qt程序

    最新QT从入门到实战完整版 一.04 创建第一个Qt程序 来自 一.04 创建第一个Qt程序 好,那么刚才我们看到了Qt create的一单一些简单介绍之后呢,我们不可能只是对它进行一个简单的简介就完 ...

  9. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者"tingsking18"和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消 ...

最新文章

  1. IDEA中忽略git或svn中无需提交的文件或文件夹
  2. percona-Toolkit
  3. 开发进度月报(GB8567——88)
  4. 笔记本屏幕出现横条纹_华为再添黑科技,手机一碰笔记本,手机页面就出现在PC屏幕上...
  5. 统计占比_Excel数据透视表:统计各项所占百分比
  6. tuxedo客户端调用java_tuxedo调用客户端_tuxedo调用java socket_调用tuxedo
  7. 基于 VisualStudio2019 的 ASP.NET 后台环境搭建
  8. 调试一个开源的车牌识别算法遇到的总结
  9. tabLayout 设置分割线
  10. 微信设置“种草昵称”,个性有意思,来看看!
  11. 寒假线上兼职:300-500元/小时,安利一个大学生也能月入8K的线上兼职!
  12. 付呗聚合支付快速教程 分账篇③——多商户模式下分账提现全流程详解
  13. 迎接爆炸主升浪?(附股)
  14. 《Android 应用 之路》 MPAndroidChart~BubbleChart(气泡图) and RadarChart(雷达图)
  15. react-rnd靠右显示
  16. 华为初面 + 综合面试(Java 技术面)附上面试题,share 给大家~
  17. 【VBA】 将VBA代码插入Excel中
  18. 个推推送,APP接收到推送后的操作(前台与非前台的处理不同)
  19. 海尔环境如何卸载亚信防毒墙和安全助手
  20. ROS学习笔记三(TF的类)

热门文章

  1. Redis学习之setex命令
  2. ECE8.1认证之路
  3. 高精度18位 5 MSPS 低功耗数据采集信号链_电工基础电路图讲解
  4. 如何在所有流媒体服务中搜索电影或电视节目
  5. web前端编程实战实例:制作静态京东首页
  6. 【CS231n】斯坦福大学李飞飞视觉识别课程笔记(四):图像分类笔记(上)
  7. 蓝桥杯-打印菱形/字符串截断
  8. java方法头_java方法学习
  9. userAgent判断客户端,以及各个浏览器的ua
  10. supervisor+nginx+cesi