准备乱写一点Qt自定义Widget在Designer中的使用。可是又不想重复提升法(promotion)及插件法基本用法,因为Manual中Using Custom Widgets with Qt Designer已经说的很清楚了。

使用designer

Qt用户可能会经历这样的3个阶段:

刚接触Qt,在designer中拖拖拽拽,一个界面就形成了。相当方便(不过不少人网友初次接触时对layout相当不适应)

比较熟悉之后,感觉designer是个累赘,比如:

感觉在designer中拖拽控件,完全没有在代码中写的易于控制。尽管都是用QLayout

接触到自定义控件后,发现在designer中使用自定义控件比较麻烦。

就是不太喜欢desinger生成.ui文件,然后uic生成 ui_xxx.h文件的这套东西。

...

再过一段时间,发觉,designer确实很方便。而且通过提升法在designer中使用自定义控件是非常简单的。而且前一阶段的问题其实也都不算什么问题。

自定义控件

考虑下列情况:

从QWidget派生了一个led灯控件:HLed

从QSpinBox派生了一个进制可变的:HBaseSpinBox

从QLabel派生了一个发射但双击信号的:HLabel

...

恩,没什么特别的哈

如果在代码中使用的话,包含头文件直接用即可。和标准控件没有任何区别。

如果在designer中使用,分别拖放QWidget、QSpinBox、QLabel,然后右键点击提升...

提升 vs 插件

两种方法有什么区别么?什么区别?

先考虑我们是如何使用designer的(此处不考虑.ui动态加载):

打开designer,拖放控件,应用布局,设置属性

保存,生成 XXX.ui 文件

调用 uic 将 XXX.ui 预处理成 ui_XXX.h

调用C++编译器编译这些 .h、.cpp

注意,如果你写了插件,那么它只在第一步中有用。有什么用:

插件包含类名name()已经头文件includeFile()信息。(对比,用提升法时,手动输入这两项信息)

插件包含控件的实现

所以在designer中可以看到控件的真实样子。(对比,提升法时,需要一个替身,一般就是其基类)

可以感知其有哪些属性,并显示在属性编辑器中。(对比,你可以直接在属性编辑器中添加属性,又一个大大的加号,不是么?)

...

归根到底,插件法 和 提升法想比,其实没有本质的区别。二者都是要生成一个.ui文件,而这个文件的使用,和插件一点关系都没有。

还有点什么...

前面的东西都似乎没什么意思,因为Manual中介绍很清楚,只要用过提升法和插件法就能得出上面这些的东西。

可是,还有有一点可能稍微有点意思,考虑:

我从QStackedWidget派生类了一个HDoubleSpinBox。可是在designer中,我想看到一个QDoubleSpinBox,而不是一个stacked widget.

我从QLabel派生了一个HLabelButton。可是在designer中,我想看到一个QToolButton,而不是一个 QLabel

...

插件法能不能做到?

能,只要让插件的createWidget()创建一个QDoubleSpinBox或者QToolButton

提升法能不能做到?

能,注意到提升时我们我们需要选择一个基类。而这个基类,我们可以随便选,选择哪一个,哪一个就会作为替身显示出来。

Qt Designer中自定义控件的使用(提升法与插件法)的更多相关文章

  1. 把自定义控件集成到Qt Designer中

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

  2. 自定义的插件如何加载到Qt Designer中(详细)

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

  3. VS2008 Qt Designer 中自定义信号槽

    一.Qt Designer自定义槽函数 发现:在VS2008 +Qt4.7  中打开ui文件,所用的英文QT Designer工具,没有转到槽函数的功能,不如QtCreator自带的QtDesigne ...

  4. PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性

    autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...

  5. PyQt(Python+Qt)学习随笔:Qt Designer中部件的样式表styleSheet属性

    styleSheet属性是定义部件外观的属性样式表,在Qt中styleSheet样式表是类似于html的css样式一样的方法,只是时专门为Qt中的部件开发的.styleSheet的定义语法也是类似CS ...

  6. PyQt(Python+Qt)学习随笔:Qt Designer中部件的layoutDirection属性

    layoutDirection属性保存的是部件的布局方向,有三个取值: 在部件上设置布局方向时,它将传播到部件的子级,但不会传播到作为窗口的子级,也不会传播到已显式调用setLayoutDirecti ...

  7. PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性

    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...

  8. PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性

    toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中部件的是否接受鼠标拖放事件的acceptDrops属性及含义

    acceptDrops属性表示当前部件是否接受鼠标拖放事件,鼠标拖放应该是与鼠标拖拽结合在一起的,在Qt Designer中可以通过属性acceptDrops设置部件是否接受鼠标拖放事件.如果部件接受 ...

随机推荐

  1. POJ 2236 Wireless Network 第一次做并查集,第一次写博客

    题意是判断两台电脑是否能通讯,两台修好的电脑距离在指定距离内可直接通讯,且两台修好的电脑能通过一台修好的电脑间接通讯.代码如下: #include <iostream> #include ...

  2. http连接复用进化论

    HTTP协议是应用层协议,它定义万维网客户端如何与服务器进行通信.它在传输层的TCP协议的基础上进行数据传输 HTTP 1.0 在HTTP 1.0时代,默认一个http请求对应一个TCP连接,没有任何 ...

  3. 1.3.3、通过Header属性匹配

    server: port: 8080 spring: application: name: gateway cloud: gateway: routes: - id: guo-system4 uri: ...

  4. linux学习之路第五天(文件目录类第一部分)

    文件目录类 pwd 指令 基本语法 pwd (显示当前目录的绝对路径) Ls 指令 cd 指令 -代表的是上一级目录 mkdir指令 用于创建目录 基本语法 mkdir [选项] 要创建的目录 常用选 ...

  5. ESP32构建系统 (传统 GNU Make)

    概述: 一个 ESP-IDF 项目可以看作是多个不同组件的集合,ESP-IDF 可以显式地指定和配置每个组件.在构建项目的时候,构建系统会前往 ESP-IDF 目录.项目目录和用户自定义目录(可选)中 ...

  6. iPhone X适配方案

    iPhone X适配方案 https://github.com/Wscats/iPhone-X 绝对长度单位 英寸 厘米 毫米 磅 pc inch cm mm pt pica 相对长度单位 是网页设计 ...

  7. DEV-C++ 5.11调试设置方法

    DEV-C++调试设置方法:默认不能调试,打开调试的方法: 1.点击"工具"菜单--编译选项--"代码生成/优化"--连接器--"产生调试信息&quo ...

  8. Java核心基础第5篇-Java面向对象_类和对象

    Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...

  9. IDEA上搭建spark开发

    IDEA上搭建spark开发环境 我本地系统是windows10,首先IDEA上要安装了scala插件. 1.下载winutils.exe文件 winutils.exe是在Windows系统上需要的h ...

  10. 一定要收藏的5个优秀的SpringCloud开源项目

    上一期为大家推荐了几个前端模板,没看过的点下面 一定要收藏的5个后台管理系统的前端框架 今天再为大家推荐几个优秀的SpringCloud开源脚手架项目,开箱即用,不管是学习还是开发新项目,都非常不错. ...