Qt创建设计师自定义控件(Qt Designer自定义控件)
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自定义控件)相关推荐
- linux qt创建静态库,QT创建与QT无关的纯C++程序和动态/静态库
QtCreator是一个很好的编写C++程序的工具,我们可以利用其高效的开发IDE来开发纯C++应用程序或动态库,静态库. 一.创建纯C++应用程序 1.新建项目,选择Non-Qt Project,可 ...
- 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件
在使用Qt Designer设计窗体界面时,我们可以使用Widget Box里的窗体控件非常方便的绘制界面,比如拖进去一个按钮,一个文本编辑器等.虽然Qt Designer里的控件可以满足我们大部分的 ...
- linux qt 自定义控件,编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件...
要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:"升级(promo ...
- Qt Designer自定义控件创建、使用
Qt Designer自定义控件创建.使用 如何创建一个自定义的QWidget控件并导入Qt Designer 中进行使用? 一.创建Qt Designer自定义控件 第一步: 创建Qt Design ...
- 第七章:Qt设计师使用(designer)
前情回顾: 第一章:Qt的概述 第二章:在Ubuntu编写第一个Qt程序 第三章:Qt的字符串和字符编码 第四章:Qt的信号和槽 第五章:Qt容器窗口(父窗口) 第六章:面向对象的Qt编程 Qt设计师 ...
- QT:Qt设计师的使用 designer
QT设计师的使用 designer <tips> 源文件/头文件的'最后加空行',有些编译不加空行会报警告. 1. 启动设计师 在命令行 $: designer 根据提示选择模板(父窗 ...
- Qt Clion使用飞扬青云的自定义控件
飞扬青云自定义控件下载 按照对应版本下载自定义控件 修改clion cmake cmake_minimum_required(VERSION 3.15) set(PROJECT_NAME TEST) ...
- 04 创建第一个Qt程序
最新QT从入门到实战完整版 一.04 创建第一个Qt程序 来自 一.04 创建第一个Qt程序 好,那么刚才我们看到了Qt create的一单一些简单介绍之后呢,我们不可能只是对它进行一个简单的简介就完 ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者"tingsking18"和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消 ...
最新文章
- IDEA中忽略git或svn中无需提交的文件或文件夹
- percona-Toolkit
- 开发进度月报(GB8567——88)
- 笔记本屏幕出现横条纹_华为再添黑科技,手机一碰笔记本,手机页面就出现在PC屏幕上...
- 统计占比_Excel数据透视表:统计各项所占百分比
- tuxedo客户端调用java_tuxedo调用客户端_tuxedo调用java socket_调用tuxedo
- 基于 VisualStudio2019 的 ASP.NET 后台环境搭建
- 调试一个开源的车牌识别算法遇到的总结
- tabLayout 设置分割线
- 微信设置“种草昵称”,个性有意思,来看看!
- 寒假线上兼职:300-500元/小时,安利一个大学生也能月入8K的线上兼职!
- 付呗聚合支付快速教程 分账篇③——多商户模式下分账提现全流程详解
- 迎接爆炸主升浪?(附股)
- 《Android 应用 之路》 MPAndroidChart~BubbleChart(气泡图) and RadarChart(雷达图)
- react-rnd靠右显示
- 华为初面 + 综合面试(Java 技术面)附上面试题,share 给大家~
- 【VBA】 将VBA代码插入Excel中
- 个推推送,APP接收到推送后的操作(前台与非前台的处理不同)
- 海尔环境如何卸载亚信防毒墙和安全助手
- ROS学习笔记三(TF的类)