1. 程式人生 > >Qt浮動按鈕的實現(使用窗口背景透明、實現只顯示浮動按鈕的目的)

Qt浮動按鈕的實現(使用窗口背景透明、實現只顯示浮動按鈕的目的)

event 浮動按鈕 打開 解決 屬於 為什麽 過程 按鈕 -i

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

Qt浮動按鈕的實現(使用窗口背景透明、實現只顯示浮動按鈕的目的)