Qt 實現新手引導

Qt實現新手引導

對于一個新安裝的軟件或者一個新的功能,提供一個新手引導步驟,能夠讓用戶快速熟悉。
在這里插入圖片描述
這是最終效果,每一個按鈕都會有一個簡單引導,通過點擊上一步、下一步來切換不同的指導。當前引導的功能,會有一個高光區,該高光區可點擊,其他區域不可點擊。引導結束后回歸主界面。

引導層

void GuideOverlayTip::updateWidgets()
{if (m_currentStep >= m_highlightRects.size()){hide();return;}if(m_currentStep == m_highlightRects.size() - 1){m_btnPrev->setText(tr("完成"));}QRect rect = m_highlightRects[m_currentStep];m_tipLabel->setText(m_tips[m_currentStep]);m_tipLabel->adjustSize();m_tipLabel->move(rect.topRight() + QPoint(10, -rect.height()/2));if(m_currentStep != 0){m_btnPrev->move(rect.bottomLeft() + QPoint(-80, 10));m_btnPrev->show();}else{m_btnPrev->hide();}m_btnNext->move(rect.bottomRight() + QPoint(10, 10));
}

根據當前引導,更新btn、label順序、文本顯示。

void GuideOverlayTip::updateMask()
{if (m_currentStep >= m_highlightRects.size()){return;}QRegion fullRegion(rect());QRegion highlightRegion(m_highlightRects[m_currentStep].adjusted(0, 0, 1, 1), QRegion::Rectangle);QRegion maskedRegion = fullRegion.subtracted(highlightRegion);setMask(maskedRegion);
}

setMask可以遮擋非高光區的事件。

void GuideOverlayTip::paintEvent(QPaintEvent *)
{QPainter painter(this);QPainterPath maskPath;maskPath.addRect(rect());maskPath.addRoundedRect(m_highlightRect, 8, 8);maskPath.setFillRule(Qt::OddEvenFill);painter.fillPath(maskPath, QColor(0, 0, 0, 160));
}

根據需求繪制一個半透明的背景。

調用層

void MainWindow::showGuide()
{QList<QRect> steps;QStringList tips;for (int i = btn1; i <= btn4; ++i){QPushButton* btn = m_pushBtns[i];QRect btnRect(this->mapFromGlobal(btn->mapToGlobal(QPoint(0, 0))), btn->size());steps << btnRect;}qDebug() << steps;tips << "點擊這里改變改變背景顏色為A";tips << "點擊這里改變改變背景顏色為B";tips << "點擊這里改變改變背景顏色為C";tips << "點擊這里恢復默認背景";m_guide->setSteps(steps, tips);m_guide->start();}

傳入高光區位置、提示文本等;
其中為m_guide = new GuideOverlayTip(this);

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

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

相關文章

Maven+Spring

一、Maven 相關- 本地倉庫設置&#xff1a;- 在 IDE&#xff08;如 IntelliJ IDEA&#xff09;中可以設置 Maven 的本地倉庫路徑&#xff0c;本地倉庫用于存儲從遠程倉庫下載的依賴庫&#xff0c;方便項目重復使用。- 倉庫關系&#xff1a;- 項目&#xff1a;開發中的項目&…

Android Handler 消息機制

常用場景&#xff1a; 子線程發送Message 主線程處理Message 子線程發送消息 public final boolean sendEmptyMessageDelayed(int what, long delayMillis) {Message msg Message.obtain();msg.what what;return sendMessageDelayed(msg, delayMillis);}public final boole…

day9 串口通信

1串口通信串口通信是嵌入式系統和電子設備中最常用的 異步串行通信 方式&#xff0c;核心是通過 TX&#xff08;發送&#xff09; 和 R&#xff08;接收&#xff09; 兩根線實現全雙工數據傳輸。2通信協議分類2.1同步/異步通信同步和異步是串行通信中兩種根本不同的數據傳輸方式…

面向對象的設計模式

一、設計模式簡介1、什么是設計模式針對反復出現的問題所總結歸納出的通用解決方設計模式是指在軟件開發過程中案。這些方案是眾多軟件開發人員經過大量實踐總結出來的&#xff0c;具有高效性、可維護性和可擴展性等優點。使用設計模式可以幫助開發者更高效地構建軟件系統&…

每日釘釘API探索:chooseDepartments專注于部門維度的選擇接口

在企業級應用開發過程中&#xff0c;針對組織架構中的部門進行操作是非常常見的需求。今天我們要介紹的是釘釘的chooseDepartments API&#xff0c;它允許用戶以部門為單位進行選擇&#xff0c;并返回所選部門的相關信息。&#x1f4cc; 功能概述chooseDepartments API主要用于…

生產環境CI/CD流水線構建與優化實踐指南

生產環境CI/CD流水線構建與優化實踐指南 目錄 業務場景描述技術選型過程實現方案詳解 流水線結構設計并行構建與緩存策略部署策略&#xff1a;滾動、藍綠、金絲雀回滾與告警自動化 踩過的坑與解決方案總結與最佳實踐 業務場景描述 某大型電商平臺&#xff0c;為了保證代碼持續交…

騰訊云和火山云優劣勢對比

從問題本身看&#xff0c;用戶沒有限定具體場景&#xff0c;說明可能需要一個全面的橫向對比。不過云計算服務涉及面太廣&#xff0c;我最好先搭建一個框架性的分析結構&#xff0c;再填充具體細節。 首先想到從幾個核心維度切入&#xff1a;基礎能力&#xff08;計算存儲網絡&…

Augment AI 0.502.0版本深度解析:Task、Guidelines、Memory三大核心功能實戰指南

Augment AI 0.502.0版本深度解析&#xff1a;Task、Guidelines、Memory三大核心功能實戰指南 augment最新版輔助功能全解析續杯免費額度再用滿教程|memory|userguidlines|tasksaugment最新插件功能教程前言 在AI輔助編程領域&#xff0c;Augment AI作為一款強大的VS Code插件&…

docker搭建、小皮面板搭建、bp使用、msf

docker搭建Vulhub靶場 docker安裝 apt-get install docker.io docker-compose#設置docker代理&#xff1a;創建文件夾以及對應的文件 mkdir /etc/systemd/system/docker.service.d#在該文件中配置自己的代理ip以及代理端口 vim /etc/systemd/system/docker.service.d/http-p…

AI優化器美國VPS集成:智能算力部署與性能調優指南

在當今數字化浪潮中&#xff0c;AI優化器與高性能VPS的融合正成為企業技術架構的核心競爭力。本文將深入解析美國VPS服務器如何通過AI驅動的智能優化技術實現算力突破&#xff0c;從資源配置算法到實時流量調度&#xff0c;全面揭示這種創新組合在跨境電商、大數據分析等場景中…

【保姆級圖文詳解】Spring AI 中的工具調用原理解析,工具開發:文件操作、聯網搜索、網頁抓取、資源下載、PDF生成、工具集中注冊

目錄前言一、Spring AI 中的工具調用&#xff08;Tool Calling&#xff09;1.1、概念1.2、工作原理1.3、技術選型1.4、原理解析1.4.1、實現接口1.4.2、工具調用二、工具調用&#xff08;Tool Calling&#xff09;開發2.1、文件操作2.1.1、概念描述2.1.2、概念描述2.2、聯網搜索…

Redis客戶端使用(Client、Java、SpringBoot)

上篇文章&#xff1a; Redis數據類型之zsethttps://blog.csdn.net/sniper_fandc/article/details/149139955?fromshareblogdetail&sharetypeblogdetail&sharerId149139955&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 Redis客戶端…

Modbus 開發工具實戰:ModScan32 與 Wireshark 抓包分析(一

引言 ** 在工業自動化領域&#xff0c;Modbus 協議猶如一座橋梁&#xff0c;連接著各種電子設備&#xff0c;實現它們之間高效的數據交互。從可編程邏輯控制器&#xff08;PLC&#xff09;到人機界面&#xff08;HMI&#xff09;&#xff0c;再到各類智能傳感器&#xff0c;M…

Oracle SQL - 使用行轉列PIVOT減少表重復掃描(實例)

[13/JUL/2025, Yusuf Leo, Oracle SQL Performance Tuning Series]我們經常會遇到從同一表中按不同維度取出不同區間的數據&#xff0c;再以相同的屬性將這些數據分別匯總到一起的需求。這類需求往往迫使我們對同一個表反復去掃描&#xff0c;當原始數據量太大的時候&#xff0…

HTTP 請求方法詳解:GET、POST、PUT、DELETE 等

在 HTTP 協議中&#xff0c;請求方法&#xff08;也稱為 HTTP 動詞&#xff09;定義了客戶端希望對指定資源執行的操作類型。這些方法是 HTTP 報文的核心組成部分&#xff0c;決定了請求的目的和行為。 主要 HTTP 請求方法 1. GET 用途&#xff1a;獲取資源 特點&#xff1a…

Android 代碼熱度統計(概述)

1. 前言 代碼熱度統計&#xff0c;在測試中一般也叫做代碼覆蓋率。一般得到代碼覆蓋率后就能了解整體樣本在線上的代碼使用情況&#xff0c;為無用代碼下線提供依據。 做了一下調研&#xff0c;在Android中一般比較常用的是&#xff1a;JaCoCO覆蓋率統計工具&#xff0c;它采…

RAG優化

RAG搭建本地AI知識庫&#xff0c;在使用過程中遇到的三大痛點&#xff0c;以及相應的進階方案。1. RAG知識庫的三大痛點-- 內容理解不足&#xff1a;AI難以全面理解導入資料的內容&#xff0c;比如在向量編碼時候&#xff0c;生硬的截斷等導致分析結果不理想。eg: 知識庫分割器…

Ubuntu 24.04 啟用 root 圖形登錄

關鍵詞&#xff1a;Ubuntu 24.04、root 登錄、GDM、SSH、nano、配置文件一、前言 Ubuntu 默認禁用 root 賬戶 的圖形與 SSH 登錄&#xff0c;這是為了安全。但在某些場景&#xff08;如測試、救援、自動化腳本&#xff09;你可能需要 直接用 root 登錄 GNOME 桌面。本文以 Ubun…

Jekyll + Chirpy + GitHub Pages 搭建博客

Chirpy 是適用于技術寫作的簡約、響應迅速且功能豐富的 Jekyll 主題&#xff0c;文檔地址&#xff1a;https://chirpy.cotes.page/ &#xff0c;Github 地址&#xff1a;jekyll-theme-chirpy 。 1.開始 打開 chirpy-starter 倉庫&#xff0c;點擊按鈕 Use this template -->…

學習 Flutter (一)

學習 Flutter (一) 1. 引言 什么是 Flutter&#xff1f; Flutter 是 Google 開發的一套開源 UI 框架&#xff0c;主要用于構建高性能、高保真、跨平臺的應用程序。使用一套 Dart 編寫的代碼&#xff0c;開發者可以同時構建適用于&#xff1a; Android iOS Web Windows、mac…