4
QGraphicsview有一個方法setDragMode(ScrollHandDrag)
,用於通過單擊鼠標左鍵來啓用平移。但我想啓用平移單擊鼠標滾輪時(中間的按鈕),並創建以下定製實現鍋:Qt:實現平移的正確方法(拖動)
//Within a custom derived class of QGraphicsView
//pan is true when wheel is clicked and false when released
//last Pos is defined somewhere else in the class
void GridView::mouseMoveEvent(QMouseEvent *event){
if(pan){
QPointF currentPos = event->pos();
QPointF relPos = currentPos - lastPos;
lastPos = currentPos;
//this is what creates the panning effect
translate(relPos.x(), relPos.y());
}
QGraphicsView::mouseMoveEvent(event);
}
也能正常工作的大部分。但是,例如,如果我將單位矩陣縮放1,000,000,則此方法失敗並停止平移(就像視圖卡住了一樣)。當我使用setDragMode()
時,不會出現這個問題setDragMode()
正確的自定義實現是什麼,所以它通過輪子點擊來啓用?
這是一個很好的解決方法!我將它與調用setInteractive true/false和setDragMode ScrollHandDrag/NoDrag分別用於新聞發佈事件 – Shootfast
@Shootfast偉大的東西。也一樣。 –
如果您需要LeftButton事件來處理其他事情,這可能無法按預期工作。這裏描述了一種替代方法:https://stackoverflow.com/a/5156978/2055281 – user31208