Qt浮动按钮的实现(使用窗口背景透明、实现只显示浮动按钮的目的)
2017-06-30 17:52
519 查看
Qt浮动按钮的实现
效果如下:图3
估计很多做Qt有一定经验的朋友会觉得这个效果不难,但是这是一个需求奇葩的实际业务中做出的效果。笔者会想讲下客户的需求和整体框架的矛盾。
整个项目主要是由Qt搭建的,图上的地图是JavaScript实现的。显然要实现这个效果在地图控件中去实现在结构上会更加合理,但是这些按钮的功能是需要打开对应的QWidget,如果是在地图控件中实现会让这个公司长期维护的地图控件嵌入业务相关的代码,这是不合理的。如果是在Qt这里实现,因为地图控件是嵌入在一个QWidget中,所以在QWidget上做出不属于gaiQWidget的浮动按钮才是真正的挑战。
图4
将所有按钮放入一个QWidget中,在QWidget中利用这两行代码就可以实现出一组浮动的按钮,但是位置还不对。
然后是在你这组浮动按钮的父窗口中实现以下事件响应:
图5
moveEvent是为了让浮动按钮跟随父窗口移动,hideEvent是跟随父窗口隐藏,为什么笔者还要实现showEvent、paintEvent这是因为在show的过程中,浮动按钮会先于父窗口恢复,给人以很怪异的感觉,所以在showEvent中将m_bISToolWidgetShow赋值为真,在接下来的PaintEvent中让浮动按钮晚一点显示,再将m_bISToolWidgetShow赋值为假,如果不是因为show进的paintEvent就不需要这个处理。
总结:也许笔者这些利用黑科技解决的Qt问题你一辈子都遇不上,但是一旦遇上会让你抓狂。我分享这些的经验不仅仅是为了解决某些特定的问题,更是为了给你提供一些解决的思路。
http://www.jianshu.com/p/b0dc50cb0119
相关文章推荐
- 半透明信息显示浮动窗口的实现
- 自绘实现半透明水晶按钮(继承CButton,设置BS_OWNERDRAW风格,覆盖DrawItem函数绘制按钮,把父窗口的背景复制到按钮上,实现视觉上的透明,最后通过AlphaBlend实现半透明)
- QT下的几种透明效果(QPalette背景白色,窗口设置setWindowOpacity,QPainter使用Clear模式绘图)
- 半透明信息显示浮动窗口的实现
- 半透明信息显示浮动窗口的实现
- 用Qt实现窗体的无边框、可移动、透明不规则显示(需背景透明的图片)
- QT 实现子控件的透明,可以实现主窗口设置背景皮肤
- 透明按钮背景不刷新【不使用父窗口背景刷新】
- 半透明信息显示浮动窗口的实现
- 用Qt实现窗体的无边框、可移动、透明不规则显示(需背景透明的图片)
- Qt 中如何实现对图片设置透明色显示
- 使用GIMP实现图片的背景透明
- 再谈用VB无窗口透明Usercontrol编写透明浮动按钮
- 使用CSplitterWnd实现拆分窗口(多视图显示)
- 窗口控件透明效果的实现--DSkinLite界面库使用技巧
- QT实现窗口透明的方法
- 使用CSplitterWnd实现拆分窗口(多视图显示)
- 去掉button按钮左右两边的留白 设置按钮背景为透明 去掉鼠标点击时出现的虚线边框 层的显示与隐藏
- 使用CSplitterWnd实现拆分窗口(多视图显示)
- QT实现透明效果的按钮