《QT實用小工具·六十二》基于QT實現貝塞爾曲線畫炫酷的波浪動畫

1、概述
源碼放在文章末尾

該項目實現了通過貝塞爾曲線畫波浪動畫,可控制 顏色+密度+速度+加速度
安裝與運行環境
語言:C++
框架:Qt 11.3
平臺:Windows

將屏幕水平平均分為10塊,在一定范圍內隨機高度的12個點(左右出頭),通過貝塞爾曲線連接連續的點,即可繪制成一段段連續的波浪。

但是每兩端波浪都會有折線凸起,根據貝塞爾曲線的原理,兩個控制點中點作為新的控制點,原來的兩點連線即為該控制點在新曲線上的切線,這樣既可繪制成只由三個控制點影響的B樣條。

為了逼真,通過時鐘以及大量狀態機確定隨機范圍,例如在某一段時間整體偏下方,某一段時間整體偏上方,模仿大自然水面潮漲潮落。
項目demo演示如下所示:
在這里插入圖片描述
項目部分代碼如下所示:
創建:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{bw1 = new BezierWaveBean(this);bw1->set_offsety(geometry().height()/20); // 垂直偏移位置【可選】bw1->set_speedx(4); // 設置速度bw1->start();
}

繪制:

void MainWindow::paintEvent(QPaintEvent *e)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true); // 抗鋸齒painter.fillPath(bw1->getPainterPath(painter), QColor(255, 0, 0, 50));return QMainWindow::paintEvent(e);
}

尺寸:

void MainWindow::resizeEvent(QResizeEvent *e)
{bw1->set_rect(geometry());return QMainWindow::resizeEvent(e);
}

開關:

bw1->start();  // 開始
bw1->pause();  // 暫停
bw1->resume(); // 繼續

源碼下載

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

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

相關文章

飛天使-k8s知識點29-kubernetes安裝1.28.0版本

文章目錄 選用版本初始化服務器,自己修改里面的ipreboot haproxy安裝 ,可以參考我之前寫的內核參數調整,安裝docker 安裝cri-dockerd開始安裝集群工具下載鏡像以及啟用完畢之后 此時的coredns 不通結果展示 選用版本 k8s 1.24版本之前還可以使用docker&…

【初階數據結構】順序表OJ題講解

前言 📚作者簡介:愛編程的小馬,正在學習C/C,Linux及MySQL。 📚本文收錄與初階數據結構系列,本專欄主要是針對時間、空間復雜度,順序表和鏈表、棧和隊列、二叉樹以及各類排序算法,持…

基于ambari hdp的kafka用戶授權讀寫權限

基于ambari hdp的kafka用戶授權讀寫權限 版本Kafka 2.0.0添加自定義配置修改admin密碼重啟kafka授權讀取授權寫入有效通配符部分舉例 版本Kafka 2.0.0 添加自定義配置 authorizer.class.name kafka.security.auth.SimpleAclAuthorizer super.users User:admin allow.everyo…

【LLM 論文】Step-Back Prompting:先解決更高層次的問題來提高 LLM 推理能力

論文:Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models ???? Google DeepMind, ICLR 2024, arXiv:2310.06117 論文速讀 該論文受到的啟發是:人類再解決一個包含很多細節的具體問題時,先站在更高的層次上解…

Android 屏幕適配全攻略(上)-掌握屏幕單位,應對千變萬化的設備

本文從 Android 開發中常見的長度單位 px、dp、sp 入手,詳細介紹了它們的特點及轉換關系。 接著深入探討了屏幕尺寸、分辨率、像素密度等重要的屏幕指標,幫助讀者全面理解它們之間的聯系。最后,通過實例代碼演示了如何在代碼中進行單位轉換&…

三分鐘上手安全滲透系統Kali Linux

kali linux系統集成了常用的安全滲透工具,省去了安裝工具的時間,做安全相關的工作是非常推薦使用的。 安裝Kalii Linux 安裝系統 一般使用虛擬機進行安裝,Kali Linux基于Debian內核,虛擬機的操作系統選擇Debian 7.x 64 選擇系統…

【SRC實戰】一鍵完成全部任務獲取獎勵

挖個洞先 https://mp.weixin.qq.com/s/LkPfJuuP1K8vaFXRn-8wVg “ 以下漏洞均為實驗靶場,如有雷同,純屬巧合 ” 01 — 漏洞證明 一、業務邏輯 “ 如何欺騙APP完成任務獲取獎勵? ” 1、記錄金幣數量20 2、瀏覽商品詳情頁 3、點擊瀏覽提…

我們應該如何做參與式觀察

記得多年以前,有個朋友問我:對于做觀察,有人通過教授繪畫技巧來教人如何做觀察。你們研究員又不會畫畫,你們如何讓人相信你們更會觀察呢?坦率說,當時我被問住了,因為我從來沒有進行過這樣的對比…

day5Qt作業

服務器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//準備組件,初始化組件狀態this->setFixedSize(800,600);chatwidget new QListWidge…

代碼隨想錄算法訓練營第四十九天| 123.買賣股票的最佳時機III,188.買賣股票的最佳時機IV

目錄 題目鏈接:123.買賣股票的最佳時機III 思路 代碼 題目鏈接:188.買賣股票的最佳時機IV 思路 代碼 總結 題目鏈接:123.買賣股票的最佳時機III 思路 與之前買賣股票不同的是本題要求最多買賣兩次,那么dp數組以及遞推公式都…

攻擊者正在利用AI,對保險公司發起大規模欺詐

保險欺詐一直是保險行業面臨的重要挑戰之一,尤其隨著技術的進步,欺詐者也在不斷更新其手段,利用AI技術,包括生成式模型、機器學習和數據分析工具等欺騙保險公司,而AI技術的應用正成為他們的新工具,使其犯罪…

如何打造個人IP?

打造個人IP(Intellectual Property)是當今社會中越來越受到關注的話題。個人IP指的是個人在某個領域內所擁有的獨特的、具有商業價值的知識、技能、品牌和影響力。為什么要打造個人IP?如何打造個人IP?下面我將為您詳細解答。 首先…

Navicat連接遠程數據庫時,隔一段時間不操作出現的卡頓問題

使用 Navicat 連接服務器上的數據庫時,如果隔一段時間沒有使用,再次點擊就會出現卡頓的問題。 如:隔一段時間再查詢完數據會出現: 2013 - Lost connection to MySQL server at waiting for initial communication packet, syste…

LinkedList鏈表

LinkedList 的全面說明 LinkList底層實現了雙向鏈表和雙端隊列特點可以添加任意元素(元素可以重復),包括null線程不安全,沒有實現同步 LinkedList 的底層操作機制 LinkedList底層維護了一個雙向鏈表LinkList中維護了兩個屬性fi…

【算法入門賽】A.坐標變換(推薦學習)C++題解與代碼

比賽鏈接:https://www.starrycoding.com/contest/8 題目描述 武漢市可以看做一個二維地圖。 牢 e e e掌握了一項特異功能,他可以“瞬移”,每次瞬移需要分別設定 x x x和 y y y的偏移量 d x dx dx和 d y dy dy,瞬移完成后位置會…

【Fastadmin】表格列改input框輸入編輯,以排序權重為例

目錄 1.自定義權重排序,以字段sort為例 js列代碼 在// 初始化表格table.bootstrapTable({ });的后面添加事件 api里面增加formatter方法,如果存在角色權限問題,控制器添

谷歌外鏈怎么發?

既要數量也要質量,要保證你的鏈接廣泛分布,在數量上,確實需要你的鏈接在各種平臺上有所展現,這樣能提升你網站的知名度和曝光率,但是,光有數量是不夠的,如果這些鏈接的內容不行,那對…

ARIMA模型在河流水質預測中的應用_含代碼

#水質模型 #時間序列 #python應用 ARIMA 時間序列模型簡介 時間序列是研究數據隨時間變化而變化的一種算法,是一種預測性分析算法。它的基本出發點就是事物發展都有連續性,按照它本身固有的規律進行。ARIMA(p,d,q)模型全稱為差分自回歸移動平均模型 (A…

SSH文件傳輸

一、設置SSH密鑰對,實現記住密碼 要避免每次使用scp或ssh時都輸入密碼,你可以設置SSH密鑰對(一對公鑰和私鑰),并將公鑰添加到遠程服務器上。這樣,你的系統可以通過密鑰自動驗證身份,而無需手動…

Blazor入門-基礎知識+vs2022自帶例程的理解

參考: Blazor 教程 - 生成首個應用 https://dotnet.microsoft.com/zh-cn/learn/aspnet/blazor-tutorial/intro Blazor基礎知識:Visual Studio 2022 中的Blazor開發入門_vs2022 blazor webassembly-CSDN博客 https://blog.csdn.net/mzl87/article/detail…