mousearea 物件可以附加到乙個 item 上供 item 處理滑鼠事件,它本身是乙個不可見的 item 。在其內部,可以直接引用它所附著的物件的屬性和方法。你可以將 mousearea 理解為它所附著的 item 的**。
mousearea 有很多屬性, enabled 用來控制是否處理滑鼠事件,預設值是 true ,如果你設定為 false ,那麼它所**的 item 就會無視滑鼠事件。 acceptedbuttons 屬性設定接收哪些滑鼠按鍵產生的事件(左鍵、右鍵、中鍵),示例**acceptedbuttons: qt.leftbutton | qt.rightbutton;
表示處理滑鼠左鍵和右鍵。
作為乙個 item , mousearea 也擁有 anchors 屬性,你可以使用它來描述有效的滑鼠區域。示例**anchors.fill: parent;
表示整個矩形區域都接受滑鼠事件。
mousearea 還有很多其他屬性,如 hoverenabled , pressed 等等,請參考 qt 幫助文件。
變色矩形示例
看乙個簡單的處理滑鼠事件的例子,先看**:
import qtquick 2.2
import qtquick.controls 1.1
rectangle
else if(mouse.button == qt.leftbutton)
}ondoubleclicked: }}
上面**中,在 mousearea 物件內使用了onclicked
和ondoubleclicked
兩個訊號處理程式,他們對應 mousearea 的onclicked
和ondoubleclicked
訊號。另外,如果你點一下滑鼠右鍵,程式會退出。
使用 "qmlscene handle_mouse.qml" 命令,可以看到執行效果。上面的**僅僅是繪製乙個矩形,當滑鼠左鍵按下時改變矩形區域的顏色,滑鼠右鍵按下時退出應用。下面是剛執行時的效果圖:
下面是點選滑鼠左鍵後的效果圖:
keys 物件是 qt quick 提供的,專門供 item 處理按鍵事件的物件。它定義了很多針對特定按鍵的訊號,比如onreturnpressed
/onescapepressed
/ondownpressed
/ondigit0pressed
/onbackpressed
等等;它還定義了更為普通的onpressed
和onreleased
訊號,一般地,你可以使用這兩個訊號來處理大部分按鍵。
keyevent 代表乙個按鍵事件,如果乙個按鍵被處理,event.accepted
應該被設定為 true 以免它被繼續傳遞;要是你不設定它,那它可能會繼續傳遞給其他的 item,出現一些奇奇怪怪的問題。
keys 有三個屬性:
qt quick 提供的一些元素本身會處理按鍵,比如 checkbox ,它響應空格鍵來選中或取消選中,而我們不需要給它附加 keys 物件來再次處理按鍵事件。
最後還有一點要說明的是,如果你想某個元素處理按鍵,需要把焦點給它,這通過 item 的 focus 屬性來控制,置 true 即可。
簡單示例
下面來看乙個示例**:
import qtquick 2.2
import qtquick.controls 1.1
rectangle
keys.forwardto: [movetext, likeqt];
text
keys.enabled: true;
keys.onpressed:
event.accepted = true;}}
checkbox
}
這個示例通過上下左右四個按鍵移動乙個文字串,空格鍵選中核取方塊, esc 鍵退出應用。下面是初始執行效果圖:
下面是我按了幾次方向鍵,按了空格鍵後的效果圖:
在 qml 中, timer 代表定時器,使用起來也很簡單,響應其ontriggered()
訊號即可,它也就這麼乙個有用的訊號。另外它還有幾個屬性要說明一下:
timer 還有 start()、stop()、restart() 三個方法可以呼叫,它們會影響 running 屬性。
十秒倒計時程式
**如下:
import qtquick 2.2
import qtquick.controls 1.1
rectangle
}text
timer }}
button }}
我在介面上放了個 text 物件,它下面放一按鈕。 rectangle 物件內定義了乙個 timer 物件,預設不啟動。當使用者點選 "start" 按鈕時啟動定時器。我還設定了定時器的 triggeredonstart 屬性哦,週期是 1 秒。
計數儲存在 qtobject 物件中, id 是 attrs ,在附加訊號處理程式 component.oncompleted 中初始化 counter 屬性的值為 10 。而在 timer 物件的 ontriggered 訊號處理器中遞減 counter ,當 counter 為 0 時修改 text 物件的文字為 "clap now!" 。
來看下效果。下面是初始效果圖:
下面是計時效果圖:
下圖是倒計時結束的效果圖:
參考:
《qt quick核心程式設計》第6章
qt quick事件處理之滑鼠、鍵盤、定時器
QT之滑鼠 鍵盤 定時器
用簡單的例子說話 import qtquick 2.7 import qtquick.controls 2.0 rectangle focus true keys.enabled true keys.onpressed text timer 將上述 儲存在01.qml檔案中,使用qmlscene 0...
Tkinter 滑鼠鍵盤事件(二)
widget.bind event,handler encoding utf 8 from tkinter import root tk def callback event print clicked at event.x,event.y frame frame root,width 100,he...
C 自動觸發滑鼠 鍵盤事件
要在c 程式中觸發滑鼠 鍵盤事件必須要呼叫windows函式。一 滑鼠事件的觸發 1.引用windows函式mouse event 滑鼠事件 事件型別 x座標值 0 65535 y座標值 0 65535 滾動值 120乙個單位 不支援 dllimport user32.dll static exte...