效果以下:框架
估計不少作Qt有必定經驗的朋友會以爲這個效果不難,可是這是一個需求奇葩的實際業務中作出的效果。筆者會想講下客戶的需求和總體框架的矛盾。ide
整個項目主要是由Qt搭建的,圖上的地圖是JavaScript實現的。顯然要實現這個效果在地圖控件中去實如今結構上會更加合理,可是這些按鈕的功能是須要打開對應的QWidget,若是是在地圖控件中實現會讓這個公司長期維護的地圖控件嵌入業務相關的代碼,這是不合理的。若是是在Qt這裏實現,由於地圖控件是嵌入在一個QWidget中,因此在QWidget上作出不屬於gaiQWidget的浮動按鈕纔是真正的挑戰。blog
將全部按鈕放入一個QWidget中,在QWidget中利用這兩行代碼就能夠實現出一組浮動的按鈕,可是位置還不對。事件
而後是在你這組浮動按鈕的父窗口中實現如下事件響應:ip
moveEvent是爲了讓浮動按鈕跟隨父窗口移動,hideEvent是跟隨父窗口隱藏,爲何筆者還要實現showEvent、paintEvent這是由於在show的過程當中,浮動按鈕會先於父窗口恢復,給人以很怪異的感受,因此在showEvent中將m_bISToolWidgetShow賦值爲真,在接下來的PaintEvent中讓浮動按鈕晚一點顯示,再將m_bISToolWidgetShow賦值爲假,若是不是由於show進的paintEvent就不須要這個處理。get
總結:也許筆者這些利用黑科技解決的Qt問題你一生都遇不上,可是一旦趕上會讓你抓狂。我分享這些的經驗不單單是爲了解決某些特定的問題,更是爲了給你提供一些解決的思路。io
http://www.jianshu.com/p/b0dc50cb0119class