日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT:触摸屏支持手指触摸,增加touch事件touchevent,记录前后touch坐标并处理

發布時間:2025/3/20 c/c++ 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT:触摸屏支持手指触摸,增加touch事件touchevent,记录前后touch坐标并处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QT:觸摸屏支持手指觸摸,增加touch事件touchevent,記錄前后touch坐標并處理

        • 1、手指觸摸事件當做鼠標事件去響應的可行性
        • 2、觸摸事件touchEvent的添加
        • 3、重寫touch事件

1、手指觸摸事件當做鼠標事件去響應的可行性

目前所見,有的QT關于觸摸屏觸摸事件的處理,是把手指點擊屏幕的行為,作為鼠標事件去處理的,這樣的情況在大部分場景是可以“應付應付”的,但是如果在如下場景(可能更多)這樣的處理顯然就不滿足了。

比如如下場景:【手指點擊空白處退出當前的窗口】

是鼠標點擊的話,假設沒有移動,MouseButtonPress 和 MouseButtonRelease記錄的坐標point其實是同一個點,這樣的判斷是沒有問題的。

可是,如果現在手指點擊,手指和觸摸屏的接觸點可就不一樣了,手指接觸屏幕上去就不是一個點了。這個場景下,就需要touchevent事件,去處理手指觸摸事件了。

2、觸摸事件touchEvent的添加

首先,讓在需要加touch事件的控件能夠接收touch;

this->setAttribute(Qt::WA_AcceptTouchEvents);

隨后,事件過濾器增加如下三個事件,就好了,一般都是重寫一下

TouchBegin // 開始觸摸 TouchUpdate // 狀態更新,不如手指滑動之類的 TouchEnd // 手指松開,結束觸摸

3、重寫touch事件

頭文件如下:

private:bool touchBeginEventProcess(QEvent *event);bool touchUpdateEventProcess(QEvent *event);bool touchEndEventProcess(QEvent *event);

函數,事件過濾器

bool WidgetTouch::eventFilter(QObject *object, QEvent *event) {if (object == this) {switch (event->type()){case QEvent::TouchBegin:return touchBeginEventProcess(event);case QEvent::TouchUpdate:return touchUpdateEventProcess(event);case QEvent::TouchEnd:return touchEndEventProcess(event); ............... // 剩下事件的處理~ .......... ....... } bool WidgetTouch::touchBeginEventProcess(QEvent *event) {QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);QList<QTouchEvent::TouchPoint> touchStartPoints = touchEvent->touchPoints();startPoint = touchStartPoints.at(0).screenPos().toPoint(); // touch開始觸控的點坐標touchEvent->accept();return true; }bool WidgetTouch::touchUpdateEventProcess(QEvent *event) {QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);QList<QTouchEvent::TouchPoint> touchUpdatePoints = touchEvent->touchPoints();// 設置單指觸控,還是多指觸控if (TOUCH_ONE_POINT == touchUpdatePoints.count()) { // 假設此時場景,手指滑動了QPoint nowPoint = touchUpdatePoints.at(0).screenPos().toPoint(); // screenPos 當前坐標的位置QPoint lastPoint = touchUpdatePoints.at(0).lastScreenPos().toPoint(); // 上一次坐標的位置endPoint = nowPoint; // 手指滑動后,記錄一下最后松開的 坐標位置}return true; }bool WidgetTouch::touchEndEventProcess(QEvent *event) {QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);// 這里或者 touchUpdateEventProcess 當中去處理,根據初始和結束坐標,做其它處理/* 比如上述touch空白處退出窗口的需求,根據前后坐標,滿足設定的閾值(10 - 20 像素就好),就釋放退出信號*/touchEvent->accept();return true; }

其它的處理,內容,在此時就可以使用 F1 去查看官方幫助文檔了,作用和解釋都很詳細

以上,就是增加touch事件touchevent的大概邏輯框架了。
如果更復雜的事件,就建議去使用手勢事件-QGesture了。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的QT:触摸屏支持手指触摸,增加touch事件touchevent,记录前后touch坐标并处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。