我想使用自定義遊標和預設遊標的混合爲我的QGraphicsView。 在我的實現中,我們爲視圖創建了「模式」的概念。這意味着取決於用戶所處的「模式」,左鍵單擊或左鍵拖動會發生不同的事情。無論如何,這些都不是問題,只是背景。QGraphicsView和自定義遊標
當我嘗試更改每種模式的光標時,就會出現問題。例如,對於模式1,我們想要顯示常規的箭頭光標,但對於模式2,我們想要使用自定義的像素映射。看似簡單,當我們切換到模式1時,我們稱graphicsview->viewport()->setCursor(Qt::QArrowCursor)
,模式2時爲graphicsview->viewport()->setCursor(our custom cursor)
。除非它完全不起作用。
首先,光標不會更改爲自定義光標。這是第一個問題。但是,如果通過其他操作將圖形視圖的拖動模式設置爲ScrollHandDrag,則在拖動操作完成後,光標將切換到自定義光標。奇怪的。但是情節變厚了......一旦我們切換到自定義光標,無論我們撥打setCursor(Qt::QArrowCursor)
多少次,都不能將其更改回ArrorCursor。我是否在視口或圖形視圖本身上調用setCursor也沒有關係。
所以,只是爲了好玩,在我們想要改變光標之前,我加了一個graphicsview->unsetCursor()
的調用,並且至少解決了第二個問題。只要我們在它們之間做一個小小的HandDragging,光標就可以改變。更好,但肯定不是最佳的。但是應該注意的是,在視口上執行unsetCursor不起作用。它必須絕對在圖形視圖上完成 - 無論我們是否將光標設置在視口上。
要完全修補了這個問題後,我將光標定我已經添加了這些兩行:
graphicsview->setDragMode(QGraphicsView::ScrollHandDrag);
graphicsview->setDragMode(QGraphicsView::NoDrag);
其中一期工程,但你們GADS!所以在這兩個方法裏發生了一些不可思議的事情,這些方法解決了這個問題,但是看了一下代碼,我看不出是什麼。與拖動模式正在改變我想象的光標有關。
爲了完整起見,我還應該提到觸發模式更改的事情,是使用QGraphicsScene->addWidget()
添加到場景中的QPushButton。我不知道這與它有什麼關係,但你永遠不知道。
我希望有人可以澄清爲什麼我需要做出這些看似隨機的電話。我不認爲我在任何地方都做錯了什麼。預先感謝您的幫助。
編輯: 這是一個實際的代碼示例與遊標補丁如上所述。您可以從下面的鏈接查看和/或下載它們。粘貼在這裏有點長。我包括了遊標被改變的框架,因爲我有一個有趣的感覺,那就是很重要。
https://gist.github.com/712654
問題所在是在MyGraphicsView.cpp起始於線104在這裏將光標在圖形視圖中設置的代碼。完全如上所述。
請記住,隨着非常醜陋的補丁到位遊標確實工作 - 或多或少。如果沒有這些線路,您會非常清楚地看到上述文章中列出的問題。
也包含在鏈接中,是使用視圖的mainWindow的所有代碼等...唯一缺少的是我正在使用的圖像。但圖像本身並不重要,任何16x16 PNG都可以。
使用graphicsview-> setCursor(...)和graphicsview-> viewport() - > setCursor(...)適用於我。你能提供一個最小的測試用例來展示你描述的異常行爲嗎? – 2010-11-23 16:13:10