Qt浮动按钮的实现(使用窗口背景透明、实现只显示浮动按钮的目的)

Qt浮动按钮的实现

效果以下:框架


图3

估计不少作Qt有必定经验的朋友会以为这个效果不难,可是这是一个需求奇葩的实际业务中作出的效果。笔者会想讲下客户的需求和总体框架的矛盾。ide

整个项目主要是由Qt搭建的,图上的地图是JavaScript实现的。显然要实现这个效果在地图控件中去实如今结构上会更加合理,可是这些按钮的功能是须要打开对应的QWidget,若是是在地图控件中实现会让这个公司长期维护的地图控件嵌入业务相关的代码,这是不合理的。若是是在Qt这里实现,由于地图控件是嵌入在一个QWidget中,因此在QWidget上作出不属于gaiQWidget的浮动按钮才是真正的挑战。blog


图4

将全部按钮放入一个QWidget中,在QWidget中利用这两行代码就能够实现出一组浮动的按钮,可是位置还不对。事件

而后是在你这组浮动按钮的父窗口中实现如下事件响应:ip


图5

moveEvent是为了让浮动按钮跟随父窗口移动,hideEvent是跟随父窗口隐藏,为何笔者还要实现showEvent、paintEvent这是由于在show的过程当中,浮动按钮会先于父窗口恢复,给人以很怪异的感受,因此在showEvent中将m_bISToolWidgetShow赋值为真,在接下来的PaintEvent中让浮动按钮晚一点显示,再将m_bISToolWidgetShow赋值为假,若是不是由于show进的paintEvent就不须要这个处理。get

总结:也许笔者这些利用黑科技解决的Qt问题你一生都遇不上,可是一旦赶上会让你抓狂。我分享这些的经验不单单是为了解决某些特定的问题,更是为了给你提供一些解决的思路。io

 

http://www.jianshu.com/p/b0dc50cb0119class

相关文章
相关标签/搜索