Qt Designer中自定义控件的使用(提升法与插件法)
准备乱写一点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中自定义控件的使用(提升法与插件法)的更多相关文章
- 把自定义控件集成到Qt Designer中
要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:“升级(promotion) ...
- 自定义的插件如何加载到Qt Designer中(详细)
要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:“升级(promotion) ...
- VS2008 Qt Designer 中自定义信号槽
一.Qt Designer自定义槽函数 发现:在VS2008 +Qt4.7 中打开ui文件,所用的英文QT Designer工具,没有转到槽函数的功能,不如QtCreator自带的QtDesigne ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性
autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的样式表styleSheet属性
styleSheet属性是定义部件外观的属性样式表,在Qt中styleSheet样式表是类似于html的css样式一样的方法,只是时专门为Qt中的部件开发的.styleSheet的定义语法也是类似CS ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的layoutDirection属性
layoutDirection属性保存的是部件的布局方向,有三个取值: 在部件上设置布局方向时,它将传播到部件的子级,但不会传播到作为窗口的子级,也不会传播到已显式调用setLayoutDirecti ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性
accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性
toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的是否接受鼠标拖放事件的acceptDrops属性及含义
acceptDrops属性表示当前部件是否接受鼠标拖放事件,鼠标拖放应该是与鼠标拖拽结合在一起的,在Qt Designer中可以通过属性acceptDrops设置部件是否接受鼠标拖放事件.如果部件接受 ...
随机推荐
- 怎么用git将自己的源代码提交到git服务器上
在git服务器上新建仓库 在本地初始化本地仓库 初始化 git init 添加远程仓库地址 git remote add origin XXX.git 同步 git pull origin maste ...
- Gerrit GitLab GitHub的几点不同
代码评审的方式不一样 GitHub是基于Pull Request 进行代码评审; GitLab是基于Merge Request 进行代码评审; Gerrit是基于Change Request 进行代码 ...
- spring boot j集成seagger 加入拦截器后 swagger 不能访问
一开始我是这样排除拦截的,但是发现没用 后来我发现swagger的真实访问路径是这样的 转自: https://blog.csdn.net/ab1991823/article/details/7906 ...
- 6-x3 declare和typeset命令:设置变量属性
declare 和 typeset 都是 Shell 内建命令,它们的用法相同,都用来设置变量的属性.不过 typeset 已经被弃用了,建议使用 declare 代替.declare 命令的用法如下 ...
- PHP观察者模式 (转)
观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新. 场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻 ...
- 滑动窗口通用解leetcode字符串匹配问题
滑动窗口,这玩意解决一些字符串匹配的题目是真的挺好用的,虽然本质还是双指针. 思路: 1.维护一个窗口,不断的向右边移动 2.满足要求后,移动左边,当不满足时,跳出. 3.重复1,2.得出答案. 下面 ...
- CF1539A Contest Start[题解]
Contest Start 题目大意 有 \(n\) 个人报名参加一个比赛,从 \(0\) 时刻开始每隔 \(x\) 分钟有一个人开始比赛,每个人参赛时间相同,均为 \(t\) .定义一个选手的不满意 ...
- vmare下克隆一台linux
第一步:点击"克隆"按钮,注意,克隆之前选择的机器需要关机 第二步:接下来需要改一下新机器的mac地址,选中新机器,右键"设置"-->"网络适配 ...
- Scala学习——基础入门
基础语法 1)注意点 1)区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义. 2)类名 - 对于所有的类名的第一个字母要大写. 3)方法名 ...
- MySQL8.0.26安装与卸载
一.安装 1.官网下载 百度进入官网,学习用社区版够了,我下的是压缩版点这直达下载页 据说8.X版本性能优化,比5.7版本快2倍! 接着,不登录直接下载 2.创建配置 下载完后,建议解压到一个没有中文 ...