UI界面程序鼠標右鍵彈出菜單的一些事

1.概述

在做客戶端UI程序時,鼠標右鍵彈出菜單這種操作非常常見,一般在鼠標右鍵按下或者鼠標右鍵抬起事件中響應操作,顯示菜單即可,但是有時涉及到鼠標的移動,就是鼠標按下右鍵且移動時,則不需要彈出菜單,其它時候正常彈出。這種情況有很多種實現方式,但是操作體驗上,差別較大,下面記錄一種實現方案

2.實現方案

目標:實現流暢的鼠標右鍵彈出菜單操作,當鼠標右鍵按下且移動時,不彈出菜單

2.1 實現思路

開啟一個定時器 timer(設置定時器觸發超時200ms,設置定時器超時響應函數RightClickFun,函數中設置右鍵彈窗標識 boolFlag為false),在鼠標右鍵按下時啟動定時器,并設置一個右鍵彈窗標識 boolFlag為true,在鼠標右鍵彈起時,如果右鍵彈窗標識 boolFlag為true則停止定時器并顯示右鍵彈窗,否則不顯示彈窗。大致意思就是如果鼠標右鍵按下超過200ms,則判定為其它操作,不彈窗,小于200ms則彈窗。

2.2 QT實現示例

此處以c++ QT做一個簡單的示例,其它的UI界面庫原理是一樣的

Qtimer* m_rClickTimer=new QTimer(this);
m_rClickTimer->setSingleSlot(true);
connect(m_rClickTimer,SIGNAL(timeout()),this,SLOT(OnRightClick()));//鼠標按鍵按下事件響應
void TestWidget::mousePressEvent(QMouseEvent *event)
{if(event->button == Qt::RightButton){    m_rClickTimer->start(200);m_rFlag=true;}
}//鼠標按鍵抬起事件響應
void TestWidget::mouseReleaseEvent(QMouseEvent *event)
{if(event->button == Qt::RightButton){if(m_rFlag){m_rightPopMenu->move(QCursor::pos);m_rightPopMenu->show();}   }
}//定時器超時響應函數
void TestWidget::TestWidget()
{m_rFlag=false;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210314.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210314.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210314.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

104. 二叉樹的最大深度(Java)

目錄 解法: 官方解答: 方法一:深度優先搜索 方法二:廣度優先搜索 思路與算法 復雜度分析 時間復雜度: 空間復雜度: 給定一個二叉樹 root ,返回其最大深度。 二叉樹的 最大深度 是指從根…

【密碼學引論】數字簽名

第八章 數字簽名 1、數字簽名體制包括兩個方面:施加簽名、驗證簽名 SIG(M,Kd)S VER(S,Ke)bool(真、假) 2、數字簽名和信息加密的區別(從密碼學五個組成部分來回答 3、安全性要求:先簽名后加密;針對哈希函…

如何入門網絡安全_網絡安全自學

由于我之前寫了不少網絡安全技術相關的故事文章,不少讀者朋友知道我是從事網絡安全相關的工作,于是經常有人在微信里問我: 我剛入門網絡安全,該怎么學?要學哪些東西?有哪些方向?怎么選&#xff…

算法:合并兩個有序數組(雙指針)

時間復雜度 O(m n),空間復雜度 O(1) /*** param {number[]} nums1* param {number} m* param {number[]} nums2* param {number} n* return {void} Do not return anything, modify nums1 in-place instead.*/ var merge function(nums1,m,nums2,n) {let p1 m-1…

harmonyOS學習筆記之@Styles裝飾器與@Extend裝飾器

Styles裝飾器 定義組件重用樣式 自定義樣式函數使用裝飾器 可以定義在組件內或全局,內部優先級>外部,內部不需要function,外部需要function 定義在組件內的styles可以通過this訪問組件內部的常量和狀態變量,可以在styles里通過事件來改變狀態變量 弊端:只支持通用屬性和通用…

深度模型訓練時CPU或GPU的使用model.to(device)

一、使用device控制使用CPU還是GPU device torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # 單GPU或者CPU.先判斷機器上是否存在GPU,沒有則使用CPU訓練 model model.to(device) data data.to(device)#或者在確定有GPU的…

解決 Cannot read properties of undefined (reading ‘getUserMedia‘) 報錯

[TOC](解決 Cannot read properties of undefined (reading ‘getUserMedia’) 報錯) 0. 背景 使用瀏覽器輸入語音時,瀏覽器的控制臺里面有下面錯誤信息。 Cannot read properties of undefined (reading getUserMedia)1. 解決方法 在瀏覽器中訪問 chrome://fla…

半導體材料

半導體材料 電子元器件百科 文章目錄 半導體材料前言一、半導體材料是什么二、半導體材料的類別三、半導體材料的應用實例四、半導體材料的作用原理總結前言 半導體材料具有獨特的電學性質,使其在電子器件和集成電路中有廣泛的應用。通過控制半導體材料中載流子的濃度和運動方…

數字化浪潮下,你的企業數字化轉型了嗎?

企業數字化轉型面臨的挑戰 技術轉型挑戰:數字化轉型涉及到各種新技術、新軟件和新硬件,需要企業有一定的技術實力和專業知識,并且需要不斷學習和適應變化。對于傳統企業來說,可能面臨技術門檻高、技術更新快等問題。組織結構轉型…

如何用flex布局設計登錄頁?

使用 Flex 布局設計登錄頁是一種簡單而靈活的方式&#xff0c;讓頁面在不同屏幕大小下都能有良好的布局。以下是一個簡單的例子&#xff0c;演示如何使用 Flex 布局設計登錄頁&#xff1a; HTML 結構&#xff1a; <!DOCTYPE html> <html lang"en"> <…

從Android源碼中生成系統簽名文件

從Android源碼中生成系統簽名文件 文章目錄 從Android源碼中生成系統簽名文件1、在linux中打開編譯android源碼目錄。2、cd到簽名文件位置3、生成 platform.pem文件4、生成 platform.p12 文件5、生成 最終的 platform.jks系統簽名文件6、把platform.jks 放到Studio 項目app 根目…

word中,文本框如何跨頁?

我們經常使用word編輯一些文檔&#xff0c;文檔中往往會有一些比較大的文本框&#xff0c;需要跨多頁&#xff0c;我們可以使用本文章中的方法&#xff0c;將文本框連接在一起&#xff0c;是的內容自動跨頁。 在文字中插入兩個文本框如下圖&#xff1a; 將內容放到第一個文本框…

ubuntu上搭建bazel編譯環境,構建Android APP

背景是github上下載的工程&#xff0c;說明僅支持bazel編譯&#xff0c;折騰了一天Android studio&#xff0c;失敗。 不得不嘗試單價bazel編譯環境&#xff0c;并不復雜&#xff0c;過程記錄如下 說明&#xff1a;ubuntu環境是20.04&#xff0c;pve虛擬機安裝 1.安裝jdk sudo…

Android audio環形緩沖隊列

1、背景 在學習audio的過程中&#xff0c;看到了大神zyuanyun的博客&#xff0c;在博客的結尾&#xff0c;大神留下了這些問題&#xff1a; 但是大神沒有出后續的博文來說明audio環形緩沖隊列的具體實現&#xff0c;這勾起了我強烈的好奇心。經過一段時間的走讀代碼&#xff…

樸素貝葉斯 樸素貝葉斯原理

樸素貝葉斯 樸素貝葉斯原理 判別模型和生成模型 監督學習方法又分生成方法 (Generative approach) 和判別方法 (Discriminative approach)所學到的模型分別稱為生成模型 (Generative Model) 和判別模型 (Discriminative Model)。 樸素貝葉斯原理 樸素貝葉斯法是典型的生成學習…

深度學習之全面了解網絡架構

在這篇文章中&#xff0c;我們將和大家探討“深度學習中的網絡架構”這個主題&#xff0c;解釋相關背景知識&#xff0c;并就一些問題進行解答。 我選擇的問題反映的是常見用法&#xff0c;而不是學術用例。我將概括介紹該主題&#xff0c;然后探討以下四個問題&#xff1a; …

Java的I/O演進之路

文章目錄 通信技術整體解決的問題1 I/O 模型基本說明2 I/O模型Java BIOJava NIOJava AIO 3 BIO、NIO、AIO 適用場景分析 通信技術整體解決的問題 局域網內的通信要求。多系統間的底層消息傳遞機制。高并發下&#xff0c;大數據量的通信場景需要。游戲行業。無論是手游服務端&a…

區塊鏈的可拓展性研究【04】分片

分片屬于layer1擴容 區塊鏈分片是一種技術實現&#xff0c;可以將區塊鏈網絡分成多個片段&#xff0c;每個片段負責處理一部分的交易數據。這種方法可以提高區塊鏈網絡的處理速度和吞吐量&#xff0c;降低交易確認時間和費用&#xff0c;同時也可以減輕節點運行負擔。 在傳統…

【出現模塊node_modules里面包找不到】

#pic_center R 1 R_1 R1? R 2 R^2 R2 目錄 一、出現的問題二、解決辦法三、其它可供參考 一、出現的問題 在本地運行 npm run docs:dev之后&#xff0c;出現 Error [ERR_MODULE_NOT_FOUND]: Cannot find package Z:\Blog\docs\node_modules\htmlparser2\ imported from Z:\Blo…

微信小程序base64與十六進制相互轉換(使用btoa、atob方法報undefined)

前言&#xff1a;搜到很多方法都用到了btoa()、atob()&#xff0c;這兩個屬于Window 對象&#xff0c;在瀏覽器端可以直接使用&#xff0c;但是在小程序里面使用會報undefined。看到uniapp和微信小程序官方文檔都提供了下面兩個api&#xff0c;就想著經過ArrayBuffer 對象轉換一…