一、需求說明   

    上一篇文章Qt之QAbstractItemView視圖項拖拽(一)講述了實現(xiàn)QAbstractItemView視圖項拖拽的一種方式,是基于QDrag實現(xiàn)的,這個類是qt自己封裝好了的,所以可定制性也就沒有了那么強,最明顯的是,這個類在執(zhí)行exec方法后,mouse系列的回調接口就被阻塞了,隨之而來的問題就是拖拽時item項沒有了hover特性,為了解決這個問題,我們就不能使用QDrag類來實現(xiàn)拖拽了,這也是這篇文章我要講述的內容。

二、效果展示  

    如圖1是demo的效果展示,比較丑,如果加上優(yōu)秀的qss,那必然能讓人眼前一亮

圖1 ListWidget拖拽


三、實現(xiàn)思路

  1. 繼承QListWidget類,重寫其鼠標多拽時幾個虛方法,分別是mousePressEvent(鼠標按下),mouseMoveEvent(鼠標移動),mouseReleaseEvent(鼠標彈起)等,當然還包括一些輔助的回調方法enterEvent和leaveEvent。
  2. 鼠標按下時,記錄鼠標按下位置和鼠標點擊項
  3. 鼠標移動時移動插入項標示和item項快照位置,并修改鼠標形狀
  4. 最后鼠標釋放時,判斷如果需要更新拖拽項位置,那么把原有項刪除,并構造新的項插入到目標位置

      上邊的幾個步驟描述都是在mouse系列的回到接口中發(fā)生的,再也沒有QDrag的事兒啦。當然這個mouse方法中需要做一些鼠標狀態(tài)維護等。

四、代碼說明

    1、重要的類和上一篇文章中的一樣,忘記的小伙伴可以到上一篇文章查看,或者猛戳Qt之QAbstractItemView視圖項拖拽(一)
    2、下面就直接上代碼
    a

我想了解如何學習

姓名:
手機:
留言: