Qt判定鼠標是否在該多邊形的線條上

要判斷鼠標是否在由QPainterPath或一系列QPointF點定義的多邊形的線條上,你可以使用以下步驟:

  1. 獲取鼠標當前位置:在鼠標事件中,使用QMouseEventpos()方法獲取鼠標的當前位置。

  2. 檢查點與線段的距離:遍歷多邊形的每條線段,使用點到線段距離的公式計算鼠標位置到每條線段的距離。

  3. 比較距離與閾值:如果距離小于某個閾值(例如像素單位的5或10),則可以認為鼠標位于線條上。

    #include <QMouseEvent>
    #include <QVector>
    #include <QPointF>
    #include <QDebug>// ...// 假設你有一個成員變量或局部變量rectPoints
    QVector<QPointF> rectPoint;
    rectPoint << QPointF(50, 50) << QPointF(150, 50)<< QPointF(150, 150) << QPointF(50, 150);// 在你的控件的鼠標事件處理函數中
    void MyWidget::mousePressEvent(QMouseEvent *event) {QPointF mousePos = event->localPos(); // 獲取鼠標在控件內的位置double threshold = 5.0; // 設置一個閾值,根據具體情況調整if (isMouseOnPolyline(mousePos, rectPoints, threshold)) {qDebug() << "Mouse is on the polyline";// 鼠標在多邊形線條上的處理邏輯} else {qDebug() << "Mouse is not on the polyline";// 鼠標不在多邊形線條上的處理邏輯}
    }// 輔助函數:計算點到線段的距離
    double pointToLineDistance(const QPointF &p, const QPointF &p1, const QPointF &p2) {double dx = p2.x() - p1.x();double dy = p2.y() - p1.y();if (qFuzzyIsNull(dx) && qFuzzyIsNull(dy)) {return qAbs(p.x() - p1.x());}double t = ((p.x() - p1.x()) * dx + (p.y() - p1.y()) * dy) / (dx * dx + dy * dy);t = qBound(0.0, t, 1.0);QPointF nearestPoint = p1 + t * (p2 - p1);return (p - nearestPoint).manhattanLength();
    }// 檢查鼠標點擊是否在多邊形線條上
    bool isMouseOnPolyline(const QPointF &mousePos, const QVector<QPointF> &points, double threshold) {QPointF currentPoint = points.last(); // 從最后一個點開始foreach (const QPointF &nextPoint, points) {if (pointToLineDistance(mousePos, currentPoint, nextPoint) < threshold) {return true;}currentPoint = nextPoint;}return false; // 如果沒有找到,則返回false
    }

    在這個示例中,pointToLineDistance函數計算了給定點到線段的最近點的距離。isMouseOnPolyline函數遍歷多邊形的所有線段,并使用pointToLineDistance函數檢查鼠標位置是否在指定的閾值內。如果是,則可以認為鼠標位于線條上。

    請注意,閾值(threshold)是一個敏感度參數,你可以根據實際需要調整這個值。此外,mousePos是鼠標事件提供的當前鼠標位置,rectPoints是多邊形頂點的數組。在實際使用中,你需要將這些變量替換為你的具體值。

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

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

相關文章

面試高級 Java 工程師:2024 年的見聞與思考

面試高級 Java 工程師&#xff1a;2024 年的見聞與思考 由于公司業務拓展需要&#xff0c;公司招聘一名高級java工程研發工程師&#xff0c;主要負責新項目的研發及老項目的維護升級。我作為一名技術面試官&#xff0c;參與招聘高級 Java 工程師&#xff0c;我見證了技術領域的…

LATEX格式的高等數學題庫(導數和概率論與數理統計)

\documentclass{ctexart} \usepackage{amsmath,amssymb,amsfonts,hyperref} \usepackage{CJKutf8} \usepackage{enumitem} % 引入宏包 \usepackage [colorlinkstrue] {} \begin{document}\begin{CJK}{UTF8}{gkai}%正文放在此行下與\end{CJK}之間就行\tableofcontents\newpage\s…

F1-score(標準度量)

什么是F1-score&#xff1f; F1分數&#xff08;F1-score&#xff09;是分類問題的一個衡量指標。一些多分類問題的機器學習競賽&#xff0c;常常將F1-score作為最終測評的方法。它是精確率和召回率的調和平均數&#xff0c;最大為1&#xff0c;最小為0&#xff0c;如公式1所示…

高效轉換:CSV 轉 JSON 數組 API

在日常數據處理和分析中&#xff0c;CSV 和 JSON 是兩種常見的數據格式。無論是開發者還是數據科學家&#xff0c;經常需要在這兩種格式之間轉換。我們提供的 CSV 轉 JSON 數組 API 可以幫助您輕松完成這一任務。 功能特點&#xff1a; 多種輸入方式&#xff1a;支持直接粘貼…

使用GPT3.5,LangChain,FAISS和python構建一個本地知識庫

引言 介紹本地知識庫的概念和用途 在現代信息時代&#xff0c;我們面臨著海量的數據和信息&#xff0c;如何有效地管理和利用這些信息成為一項重要的任務。本地知識庫是一種基于本地存儲的知識管理系統&#xff0c;旨在幫助用戶收集、組織和檢索大量的知識和信息。它允許用戶…

C語言-->指針詳解

提示&#xff1a;本系列文章是C語言的重難點–>指針 C語言-->指針詳解 前言一、什么是指針&#xff1f;二、指針的聲明與初始化三、指針的解引用四、指針與數組五、指針與函數六、動態內存分配七、常見錯誤與注意事項總結我是將軍我一直都在&#xff0c;。&#xff01; 前…

Oracle或MySQL數據遷移到國產數據庫后的注意事項

一、人大金倉Kingbase 1、初始化后兼容 創建sysdate()方法兼容原生MySQL模式下不具備sysdate()的問題&#xff1a; create or replace function sysdate() returns timestamp with time zone as select current_timestamp; language sql; 2. 執行語句收集統計信息&#xff…

1.5-協程基礎與關鍵知識:連接線程的世界-回調型 API 協作

文章目錄 線程 API 轉換成掛起函數&#xff1a;suspendCoroutine支持取消的 suspendCoroutine&#xff1a;suspendCancellableCoroutine總結 線程 API 轉換成掛起函數&#xff1a;suspendCoroutine 在實際項目中即使已經使用協程了&#xff0c;可是要完全避免跟傳統的線程 API…

Excel 學習手冊 - 精進版(包括各類復雜函數及其嵌套使用)

作為程序員從未想過要去精進一下 Excel 辦公軟件的使用方法&#xff0c;以前用到某功能都是直接百度&#xff0c;最近這兩天跟著嗶哩嗶哩上的戴戴戴師兄把 Excel 由里到外學了一遍&#xff0c;收獲良多。程序員要想掌握這些內容可以說是手拿把掐&#xff0c;對后續 Excel 的運用…

linux的學習(七):讀取,函數,正則表達式,文本處理工具cut和awk

##簡介 shell編程中的讀取&#xff0c;函數&#xff0c;正則表達式&#xff0c;文本處理工具的簡單使用 read read&#xff1a;讀取控制臺的輸入 參數&#xff1a; -p&#xff1a;指定讀取時的提示符-t&#xff1a;等待讀取的時間 腳本例子 編寫i.sh腳本&#xff0c;enter…

算法實驗3:貪心算法的應用

實驗內容 &#xff08;1&#xff09;活動安排問題 設有n個活動的集合E{1, 2, …, n}&#xff0c;其中每個活動都要求使用同一資源&#xff0c;而在同一時間內只有一個活動能使用這一資源。每個活動i都有一個要求使用該資源的起始時間si和一個結束時間fi&#xff0c;且si <f…

JavaWeb-【2】CSS和JavaScript

筆記系列持續更新,真正做到詳細!!本次系列重點講解后端,那么第一階段先講解前端【續上篇HTML】 目錄 一、CSS 1、CSS介紹 2、CSS快速入門 3、CSS語法 4、字體顏色和邊框 5、背景顏色和字體樣式 6、div和文本居中 7、超鏈接去下劃線和表格細線 8、無序列表去掉樣式…

持續集成03--Jenkins的安裝與配置

前言 在持續集成/持續部署&#xff08;CI/CD&#xff09;的實踐中&#xff0c;Jenkins作為一個開源的自動化服務器&#xff0c;扮演著至關重要的角色。本篇“持續集成03--Jenkins的安裝配置”將帶您走進Jenkins的世界&#xff0c;深入了解如何在Linux環境中安裝并配置Jenkins。…

VUE:跨域配置代理服務器

//在vite.config。js中&#xff0c;同插件配置同級進行配置server:{proxy:{"/myrequest":{//代理域名&#xff0c;可自行修改target:"https://m.wzj.com/",//訪問服務器的目標域名changeOrigin:true,//允許跨域configure:(proxy,options) > {proxy.on(&…

人工智能與人類社會的共生共榮

隨著科技的飛速發展&#xff0c;人工智能&#xff08;AI&#xff09;已經不再是遙不可及的概念&#xff0c;而是深深地融入到了我們的日常生活中。從智能家居到智慧城市&#xff0c;從自動駕駛到醫療診斷&#xff0c;人工智能正以前所未有的方式改變著人類社會的每一個角落。然…

掌握Laravel控制器:構建強大應用的基石

掌握Laravel控制器&#xff1a;構建強大應用的基石 在Laravel框架中&#xff0c;控制器&#xff08;Controller&#xff09;是處理用戶請求和返回響應的核心組件。控制器充當了應用邏輯的中轉站&#xff0c;它接收來自路由的請求&#xff0c;處理這些請求&#xff0c;并返回視…

C4D各版本軟件下載+自學C4D 從入門到精通【學習視頻教程全集】+【素材筆記】

下載鏈接&#xff1a; 迅雷網盤https://pan.xunlei.com/s/VO1tydOxEo-Az_QCM-Jz2R4RA1?pwdvxg4# 夸克網盤https://pan.quark.cn/s/fe7450b02d80 百度網盤https://pan.baidu.com/s/1Omj4WL93F1DNdA2iP4SiMQ?pwdwmb8

[C++] 深度剖析C_C++內存管理機制

文章目錄 內存分布內存分布圖解 C語言中動態內存管理方式malloc:callocrealloc C內存管理方式內置類型**自定義類型** operator new & operator deleteoperator new & operator delete函數operator newoperator delete **new T[N]** 與**delete[]** **定位new表達式(pl…

vue 實現下拉框的數據是樹狀結構

頁面顯示效果 vue實現代碼 <el-form-item label"公司名稱" prop"comName"><el-select ref"select" v-model"queryParams.comName" placeholder"請選擇公司名稱" clearable size"small"change"handl…

可學習激活函數 Maxout

可學習激活函數 Maxout 是一種神經網絡中的激活函數&#xff0c;它在特征提取的過程中能夠學習到最優的激活方式&#xff0c;從而提高模型的表達能力和性能。Maxout 由 Ian Goodfellow 等人在2013年提出&#xff0c;是一種能夠在訓練過程中自適應地選擇激活函數的模型。 Maxou…