12.4.5 使用其他窗口部件
Qt还提供了很多其他的GUI通用窗口部件,如单选按钮、复选框和其他用于显示的窗口部件。程序清单12.16演示了其中的一些,图12.9是程序运行时的屏幕截图。
![]() |
| 图12.9 其他Qt窗口部件 |
程序清单12.16 其他Qt窗口部件
require 'Qt' |
在这个新类中,首先创建了一个Qt::GroupBox,这是一个带边框和可选标题的分组框,可以存储其他窗口部件。然后创建两个Qt::RadioButton和一个Qt::CheckBox,并将分组框设置为它们的父窗口部件。
接下来创建了一个Qt::VBoxLayout,用于存储单选按钮和复选框,并将分组框设置为使用这种布局。
接下来很重要的一点是创建一个Qt::ButtonGroup,并将复选框和单选按钮添加到其中。Qt::ButtonGroup用于将按钮、复选框和单选按钮进行逻辑编组,对这些窗口部件的视觉布局没有影响,而是将它们进行逻辑组合以提供互斥等功能(单击某些按钮时取消选择其他一些按钮)。在这个例子中,将按钮组作为buttonClicked信号的源,该信号在组中的按钮被单击时发出。
该信号的发出方式与前面介绍的信号稍有不同,因为它还发出一个参数,这里为用户单击的对象。请注意其中的C++式语法,即使用参数QAbstractButton *。前面说过,Qt是一个C++工具包,因此,有些类型的参数不可避免地使用了C++表示法(但将来的版本可能解决这种问题)。
connect语句最终的结果是,每当按钮被单击时,该按钮都将作为参数传递给somethingClicked插槽。最后,创建了一个Qt::Label和一个Qt::VBoxLayout,并排列所有窗口部件。
在somethingClicked插槽的定义中,每当按钮被单击时都将修改标签的文本,这里显示的是导致信号发出和插槽被调用的对象的类名。
如果使用内置的窗口部件无法满足需求,Qt提供了功能强大的绘图系统供程序员创建自定义窗口部件。程序清单12.17是一个小示例,演示一些这样的特性。
程序清单12.17 自定义的TimerClock窗口部件
require 'Qt' |
通过调用start方法启动定时器,其参数指定每隔25毫秒就超时(并发出timeout信号),这意味着窗口部件的update插槽将每25毫秒执行一次。
接下来创建了paintEvent方法,它重写了Qt::Widget提供的同名方法。当窗口部件需要重绘时(这里是每当Qt::Timer过期时)将调用该方法。通过重写这个方法,可以定制窗口部件如何在屏幕上绘制自己。在这个方法中,代码负责处理窗口部件的原始绘画例程。
从现在开始,就全部是几何学的内容了。创建几个Qt::Polygon来表示要绘制的时钟的指针。注意,多边形的方向无关紧要,因为以后可以修改。
接下来设置要用到的一些属性。为时钟指针定义了两个Qt::Color。Qt::Color的初始化方法的参数是RGB值和可选的alpha透明度值。
由于要绘制的定时器放在正方形中,但窗口可能是矩形,这可能导致窗口部件的形状很怪异。这里使用side变量来存储窗口部件显示在屏幕上时较短一边。另外,还使用Qt::Time.currentTime来存储当前时间。
接下来,创建一个Qt::Painter,并使用它来开始执行绘图例程。绘画时使用消除锯齿功能使边缘看起来光滑些,还通过调用painter.translate(width/2, height/2)将Qt::Painter的起始坐标设置为绘图区域的中央。同时将Qt::Painter缩放为200:200引用范围,这意味着所有绘图命令都将在200:200单位内进行绘画。如果绘画区域变大或变小,将自动调整每个单位的长度。
接下来执行一系列绘图操作,在执行变换(如旋转)时,这些操作将放在painter.save和painter.restore之间。save将当前的painter属性存储在栈中,以方便恢复它们。
代码将时钟指针旋转到表示正确时间的角度,然后绘制它们;并沿钟面的外边缘以特定的间隔绘制一些刻度。
最后通知绘图器结束绘图(通过调用painter.end)。最后使用4行代码创建Qt::Application和定时器窗口部件,再开始事件循环。图12.10显示了最终的结果。
|
| 图12.10 TimerClock窗口部件 |
| 回书目 上一节 下一节 |
|
· 第六章 你能帮我吗?.. · Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. |
· 08年5月各大网上书店及.. · 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. |
|
||||
| · NAC安全访问控制 · 网络布线测试仪器 · Windows Server 2008专.. · Windows远程桌面应用 · 网络故障排除宝典 · 运营商封堵ADSL共享 中.. · 解析35岁技术人的价值.. · 世纪枭雄比尔盖茨的王.. |
· 主流品牌防火墙配置 · ASP.NET开发教程 · 超级计算机TOP500专题 · Vista SP1对决XP SP3 · SQL Server 2008/2005.. · 程序员如何成长? · C#技术开发指南 · 虚拟化技术还有点“虚” |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Windows远程桌面应用 · C#技术开发指南 · Apache技术专题 |
· Windows集群服务应用 · C#技术开发指南 · 国际文档格式标准开战 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 |
|||