准备乱写一点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. hdu 3397 Sequence operation 线段树 区间更新 区间合并

    题意: 5种操作,所有数字都为0或1 0 a b:将[a,b]置0 1 a b:将[a,b]置1 2 a b:[a,b]中的0和1互换 3 a b:查询[a,b]中的1的数量 4 a b:查询[a,b ...

  2. Java核心基础第3篇-Java流程控制

    Java流程控制 本章一起来探讨下Java的流程控制语句.主要从以下几个方面展开: Java分支语句 Java循环语句 Java其实和其他任何的开发语言一样,分支语句和循环语句是必不可少的,有个这两个 ...

  3. jenkins send files or publish

    1.创建一个自由风格项目 2.添加用户凭据 3.配置git 4.配置构建方式 这里选择 send files or execute command over SSH 5.配置远程发布脚本 6.构建 7 ...

  4. 文末送书四本 | 这篇Java反射机制太经典!不看后悔!

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员. 价值:Java技能,面试经验指导,简历优化,职场规划指导,技能提升方法,讲不完的职场故事,个人成长经 ...

  5. 职场人都该了解<荷花定律>

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 荷花定律 ,听起来很新奇的一个 ...

  6. 第16章 pyinstaller库的使用

    pyinstaller库概述 将.py源代码,转换成无需源代码的可执行文件 .py文件通过pyinstaller转换成windows.linux以及mac的可执行文件 pyinstaller库是第三方 ...

  7. C# 8.0和.NET Core 3.0高级编程 分享笔记二:编程基础第二部分

    这一篇是接上一篇笔记的第二部分. 2.5深入研究控制台应用程序 前面创建并使用了基本的控制台应用程序,下面更深入地研究它们. 控制台应用程序是基于文本的,在命令上运行的.它们通常执行需要编写脚本的简单 ...

  8. DIY一个智能开关kwswitch

    源码地址:https://gitee.com/kerwincui/kwswitch 平台简介 该智能开关平台包括服务端.硬件端.PC端和安卓端.硬件使用ESP8266模块,成本相对较低,可以发挥想象力 ...

  9. vue(16)vue-cli创建项目以及项目结构解析

    vue-cli创建项目 上一篇我们安装了vue-cli,接下来我们就使用该脚手架进行创建项目 1.进入一个目录,创建项目 创建项目命令如下: vue create <Project Name&g ...

  10. python使用笔记28--unittest单元测试框架

    单元测试:开发程序的人自己测试自己的代码 unittest自动化测试框架 1.单元测试 unittest框架,执行的顺序是按照方法名的字母来排序的 setUpClass方法是最开始执行的 tearDo ...