[原]Qt Designer中自定义控件的使用(提升法与插件法)

2023-11-09

  • 准备乱写一点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

提升法能不能做到?

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

(注意:本文中忽略了很多细节,希望不会造成误导...)




FROM:  http://m.blog.csdn.net/blog/dbzhang800/6871693

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • flask配置https协议

    感谢https blog csdn net qq 33934427 article details 127456673 文中多有参考再实践 一 要用https协议需要有ca证书 在windows10先下载windows版本openssl 地
  • uni-app (路由)

    介绍 uni app页面路由为框架统一管理 开发者需要在pages json里配置每个路由页面的路径和页面样式 类似的小程序在app json中配置页面路由相同 所以uni app的路由用法与Vue Router不同 如仍希望采用Vue R
  • Android12及所有版本解决没有system读写权限(只需要magisk面具)

    通过magisk挂载文件的方式来修改system 不用解锁system或挂载读写 前提条件 你要确保你已经正确刷入了Magisk 刷面具保姆级别教程 举一反三 多种手机通用 这个方法实际上就相当于刷模块来达到修改的目的 本文只是给小白普及一
  • 时间同步服务chrony的简单配置

    一 chrony服务器的简介 chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件 它能让计算机保持系统时钟与时钟服务器 NTP 同步 因此让你的计算机保持精确的时间 Chrony也可以作为服务端软件为其他计算机提供时间
  • vue-router安装失败

    当安装vue router遇到以下问题 npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree npm ERR npm ERR While resol

随机推荐