2014-03-05 30 views
1

這似乎是這樣一個常見的事情,我相信我錯過了一些明顯的東西。我想要一個基於用戶拖動的東西提供2維信息的小部件。在我看來,這是一款遊戲杆,但這種非常普遍的color picker表達了相同的概念。我可以基於圖像構建小部件並單擊事件,但似乎應該有一種更簡單的方法來在不需要太多工作的情況下拼湊這些功能。有任何想法嗎?PyQt中的操縱桿之類的東西

編輯: 什麼被移動並不重要。在最簡單的情況下,用戶只需點擊一個正方形,就可以根據點擊位置設置兩個滑塊(一個垂直和一個水平)。

編輯2: 我想從用戶那裏獲得實時信息來控制系統,如速度和方向。用戶通過操縱桿類型系統傳達這些信息會更加直觀和快速。到目前爲止,前進產生速度,同時左右產生方向。否則,用戶必須向左拖動一些移動到其他滑動條,將其向上拖動等等。這就是爲什麼二維信息在遊戲控制器和RC電子設備中傳送的原因。我只是在尋找一個與之相關的小部件。

+0

什麼信息,拖着什麼?無論你是什麼意思,它都需要我認爲自定義繪畫。 –

+0

你試圖用這個小部件來表示什麼特定的信息?如果您要設置兩個滑塊,那麼爲什麼不讓用戶自己移動滑塊來設置x和y? – ekhumoro

+0

鑑於您的更新描述,所提議的小部件看起來相當專業 - 或者不管怎麼說都不是「普通的東西」,正如您所說的,這解釋了爲什麼它不是Qt提供的通用小部件集的一部分。所以我想你將不得不實施你自己的解決方案(或尋找第三方解決方案)。 – ekhumoro

回答

1

設爲QWidget

設置其最小尺寸。

實施其鼠標事件。 (如果你正在使用新的觸摸事件的東西,請確保你也處理這些東西。)

然後在鼠標拖動或鼠標按下時,根據鼠標位置的y部分調整垂直縮放比例事件,並根據鼠標事件pos的x部分調整水平縮放比例。

如果要在點擊或拖動開始之前預覽或標記點擊操作,您需要實現mouseMove事件,並且還需要爲您的小部件實現enableMouseTracking

將信息發送到相關的小部件。

做,它代表了最有意義的方式,信息的paintEvent,無論是與印刷文本,改變顏色,圓大小的改變等

或者,如果你不想讓你的輸入窗口小部件顯示信息的變化,但附近的小部件反映它,連接到它,並設置它的事件來處理它。

製作這種輸入設備不應該花太長的時間。最難的部分可能是決定當點擊或拖動發生或完成時該怎麼做。

另外,如果您正在創建一種模擬操縱桿,它們通常在中間會有一個死區。所以你可以投入一張支票來看它是否足夠接近零位。

如果你想要它像一個彈簧加載的操縱桿,你可以讓它開始動畫回到它的原始位置,每次你放開小部件。

希望有所幫助。