QT Demo 之 MouseArea(2)

在學習了上一篇《通過Demo源碼學習Qt QML編程之mousearea 》後,我們對於MouseArea的使用有了一定的瞭解,這一節我們就自己動手也寫一個基於MouseArea的小應用。
記得剛開始學習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也要善於使用幫助文檔,而且不僅要會看還要看得仔細。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章