qt元件中,show hide控制了一個開關(可能是bool類型的值),這個開關會控制repaint和update是否要發出paintEvent事件。估計内部會調用repaint和update函數。
repaint 和update函數 用于發出paintevent事件。差別有一個描述在這裡
這兩個函數都在内部有内調用
如update在窗體生效(聚焦)和失效(失焦) 或者在窗體resize等操作時會被調用到。
repaint在各種按鍵或者滑鼠按鈕的時候會調用。
paintEvent 一般隻在事件循環中調用,最高不要手動顯示調用paintEvent,可以通過調用repint函數進行。
真正的繪制操作是在paintEvent中,自定義的繪制操作也需要放到這裡面要不然會被沖刷掉。
那麼子窗體的update在什麼地方會出現呢:
現在注意到的有以下幾種情況:
1、主窗體或父窗體突然生效(聚焦)和失效(失焦),也就是變成目前操作視窗與否。可以看到父窗體響應事件後會遞歸的向所有子窗體傳遞該事件
2、父窗體中有進行resize(這個無法斷點到,但是沒有走到repaint中)
3、滑鼠移動到對應的子控件上時(這裡應該是響應了hover事件後導緻的)。