QML 事件處理 滑鼠 鍵盤 定時器

2022-02-20 13:24:14 字數 3337 閱讀 2187

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 物件內使用了onclickedondoubleclicked兩個訊號處理程式,他們對應 mousearea 的onclickedondoubleclicked訊號。另外,如果你點一下滑鼠右鍵,程式會退出。

使用 "qmlscene handle_mouse.qml" 命令,可以看到執行效果。上面的**僅僅是繪製乙個矩形,當滑鼠左鍵按下時改變矩形區域的顏色,滑鼠右鍵按下時退出應用。下面是剛執行時的效果圖:

下面是點選滑鼠左鍵後的效果圖:

keys 物件是 qt quick 提供的,專門供 item 處理按鍵事件的物件。它定義了很多針對特定按鍵的訊號,比如onreturnpressed/onescapepressed/ondownpressed/ondigit0pressed/onbackpressed等等;它還定義了更為普通的onpressedonreleased訊號,一般地,你可以使用這兩個訊號來處理大部分按鍵。

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...