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
提升法能不能做到?
能,注意到提升时我们我们需要选择一个基类。而这个基类,我们可以随便选,选择哪一个,哪一个就会作为替身显示出来。
(注意:本文中忽略了很多细节,希望不会造成误导…)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt是一种跨平台的C++开发框架,它提供了丰富的GUI组件库,使得开发者可以轻松地设计和创建各种控件和界面。自定义控件从一定程度上方便了程序的编写,让程序更加直观,使用得当的自定义控件可以让程序增添不少精彩细节。仪表盘是一种比较常见的自定义控件,它可以用来显示实时数据,例如速度,油量,温度等等。下面来简单介绍一下用Qt自定义一个仪表盘的一些步骤。 首先要构思好仪表盘的外观和功能,比如可以考虑盘的大小,采用什么颜色,显示哪些数据等等。 其次,需要用Qt提供的基础控件(如QPainter、QPoint、QRect)来构建自定义控件的各个部分,包括盘表、指针、刻度等,然后为这些部分设置合适的属性(如颜色、位置、宽度等)。 接着,需要实现控件的数据传递和刷新。一般情况下,会使用定时器或者事件触发来更新控件显示的数据。考虑到仪表盘是一种实时显示数据的控件,所以在设计数据刷新时需要保证刷新频率足够高,否则会出现卡顿、显示延迟等问题。 最后,为了方便其他的开发者使用自定义控件,可以将其打包成独立的Qt插件,或者直接将自定义控件的源代码公开发布。 以上就是简单的Qt自定义控件仪表盘的一些步骤,开发者可以根据自己的需求进行相应更改和优化。总之自定义控件并不是一件简单的事情,但是如果能够掌握好最基本的知识,就能够创造出更加精美、实用的自定义控件。 ### 回答2: Qt自定义控件仪表盘可以用于需要展示数据的界面设计。通过自定义仪表盘,可以实现不同样式和功能的展示,并且能够满足不同场景下的需求。 在Qt,仪表盘的设计可以通过绘图、圆弧、指针和动画的实现,使得界面更加直观、美观,也更加容易被用户理解和操作。可以通过Qt提供的QPainter绘图工具绘制圆弧,也可以通过QTimer控制指针的动画效果。 另外,仪表盘也是可以与其他控件进行绑定的。通过信号与槽的机制,可以将仪表盘的数值与其他控件进行绑定,实现更加复杂的界面功能。 需要特别注意的是,仪表盘的设计需要考虑到不同屏幕分辨率的适配性。通过使用Qt提供的屏幕适配机制,可以实现不同分辨率下的仪表盘展示效果。 总之,Qt自定义控件仪表盘是一个非常实用、优雅的设计元素,可以帮助开发者快速开发出漂亮的界面,并且提高用户体验。 ### 回答3: Qt是一个强大的C++跨平台框架,自带了很多常用的UI控件,但是有时候我们也需要自定义一些控件来满足我们的需求。今天我们来介绍一下如何使用Qt自定义一个仪表盘控件。 首先我们需要继承QWidget类,命名为Dashboard。然后我们需要在Dashboard的构造函数初始化一些常量,比如外部圆弧的宽度、内部圆弧的半径等等。接着我们需要重写paintEvent函数,绘制仪表盘的外部圆弧、刻度、指针等等,具体绘制方式可以根据需求灵活设置。 为了使仪表盘可以在Qt Designer拖拽使用,我们需要在Dashboard类加入QIB_DESIGNER_EXPORT_WIDGETS宏。最后在.pro文件添加如下代码: ``` QT += designer TARGET = Dashboard TEMPLATE = lib HEADERS += Dashboard.h SOURCES += Dashboard.cpp QIB_DESIGNER_EXPORT_WIDGETS(Dashboard) ``` 这样我们就可以在Qt Designer使用Dashboard自定义控件了。当然,使用自定义控件也需要相应的信号槽机制来进行交互操作。 总的来说,自定义控件可以更好地满足我们的需求,同时也可以提高界面的美观度。在自定义控件的过程,我们要考虑到控件的可扩展性、易用性以及代码的可维护性等方面,并在不断地改进和优化,不断提高自己的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值