記得剛開始學習MFC的時候,老師讓我們做一個小應用,應用很簡單,就是鼠標在窗口中隨意移動,在窗口的左上角顯示出當前鼠標的x,y座標。
創建工程
文件->新建文件或項目,打開新建窗口,然後選中應用程序中的“Qt Quick Application”,然後點擊“Choose”進入下一步。
然後輸入名稱和創建路徑,本例中輸入的名稱是MouseArea_Test_1101,項目存放的路徑是F:\Qt\project\
在下一步中,選擇組件,因爲我們創建的是Qt Quick Application,此處選擇Qt Quick 2.3組件(注:2.3是版本)
然後就是"下一步"、"下一步"和"完成"。
項目創建完成後,Qt自動打開main.qml文檔,以便於我們根據需要修改代碼。
修改代碼
首先,去除自動生成的代碼中鼠標事件的onClicked處理,然後調整一下Text的位置,去除Text的默認值並給Text設定一下id的值,以便於更新Text的顯示內容。修改後的代碼如下:
Window {
visible: true
width: 360
height: 360
MouseArea {
anchors.fill: parent
}
Text {
id: info
anchors.top: parent.top; anchors.left: parent.left ; anchors.margins: 20
}
}
下面我們就需要類比onClicked,針對鼠標位置改變,對響應的事件處理函數完成具體的操作。
查詢MouseArea的幫助文檔,發現有名爲positionChanged(MouseEvent mouse)的Signals,說明如下:
This signal is emitted when the mouse position changes.
The mouse parameter provides information about the mouse, including the x and y position, and any buttons currently pressed.
The corresponding handler is onPositionChanged.
根據說明,我們知道該信號是在鼠標位置發生改變的時候觸發,參數mouse包含了完整的鼠標信息,包括x,y的座標以及鼠標按鍵的類型。
同時,幫助文檔也告訴我們當positionChanged信號觸發時,會通過onPositionChanged事件處理函數通知到UI,以便於在UI中完成具體的操作。因此我們添加下述的代碼:
MouseArea {
anchors.fill: parent
onPositionChanged:{
info.text = + mouse.x + ',' + mouse.y
}
}
運行程序
按Ctrl+R運行項目,效果如下:
程序運行出來了,但是結果並沒有滿足我們的預期。無論我們如何移動鼠標,窗口上並沒有顯示任何輸出。但是當我們按住左鍵再移動鼠標時,奇蹟出現了,窗口左上角顯示出了當前的x,y座標。
出現問題了,我們再次回去好好看一下幫助文檔,發現除了上面提到的positionChanged和onPositionChanged,還有下面的一段:
By default this signal is only emitted if a button is currently pressed. Set hoverEnabled to true to emit this signal even when no mouse button is pressed.
原來如此,Qt默認是隻有當鼠標按下的時候,纔會觸發positionChanged信號,如果要是在沒有鼠標按下的時候也希望能觸發這個信號,需要設置hoverEnabled屬性爲true。
修改代碼如下:
MouseArea {
anchors.fill: parent
hoverEnabled:true
onPositionChanged:{
info.text = + mouse.x + ',' + mouse.y
}
}
再次運行程序,OK,一切都能正常表現了:
總結
就想學習VS必須要善用MSDN一樣,學習Qt也要善於使用幫助文檔,而且不僅要會看還要看得仔細。