QT項目 -仿QQ音樂的音樂播放器(第五節)

目錄

一、CommonPage界?設置和顯示

二、自定義ListItemBox

?三、支持hover效果

四、自定義VolumeTool

五、界面設置

六、頁面創建及彈出

七、繪制三角


一、CommonPage界面設置和顯示


void CommonPage::setCommonPageUI(const QString &title, const QString &image)
{ui->pageTittle->setText(title);ui->musicImageLabel->setPixmap(QPixmap(image));ui->musicImageLabel->setScaledContents(true);//setScaledContents(true)可以使圖片自適應控件的大小
}

?然后在qqmusic.cpp中的初始化函數中加:

void QQMusic::initUI()
{ui->likepage->setCommonPageUI("我喜歡", ":/images/ilikebg.png");ui->localPage->setCommonPageUI("本地?樂", ":/images/localbg.png");ui->recentPage->setCommonPageUI("最近播放", ":/images/recentbg.png");
}

小知識:

QT中設置圖片和文字的方法:

圖片

ui->具體的QLabel->setPixmap(QPixmap(QString的地址));

文字

ui->具體的QLabel->setText(QString的內容);

例如

ui->btIcon->setPixmap(QPixmap(btIcon));
ui->btText->setText(content);

二、自定義ListItemBox

設置好如下格式:

?UI格式:

likeBtn:#likeBtn
{border:none;
}VIPLabel:#VIPLabel
{border:1px solid #1ECD96;
color:#1ECD96;
border-radius:2px;
}SQLabel:#SQLabel
{
border:1px solid #FF6600;
color:#FF6600;
border-radius:2px;
}

測試調用:?

void CommonPage::setCommonPageUI(const QString &title, const QString &image)
{ui->pageTittle->setText(title);ui->musicImageLabel->setPixmap(QPixmap(image));ui->musicImageLabel->setScaledContents(true);//setScaledContents(true)可以使圖片自適應控件的大小ListItemBox*listItemBox=new ListItemBox(this);QListWidgetItem*listWidgetItem=new QListWidgetItem(ui->pageMusicList);listWidgetItem->setSizeHint(QSize(ui->pageMusicList->width(),45));ui->pageMusicList->setItemWidget(listWidgetItem,listItemBox);}

這里的QListWidgetItem是創建ListWidget的一行

setItemWidge是將listItemBox加入到listWidgetItem中進行綁定

結果:

?三、支持hover效果

listitembox中的hover效果

// listitembox.h 新增
protected:void enterEvent(QEvent *event);void leaveEvent(QEvent *event);// listitembox.cpp 新增
void ListItemBox::enterEvent(QEvent *event)
{(void)event;setStyleSheet("background-color:#EFEFEF");
}
void ListItemBox::leaveEvent(QEvent *event)
{(void)event;setStyleSheet("");
}

四、自定義VolumeTool

① 生成?個QT設計師界面,objectName命名為VolumeTool,geometry的寬?修改為100*350。
② 拖拽?個Widget到VolumeTool中,objectName修改為volumeWidget,geometry修改為:
[(10,10), 80*300]
拖拽?個QPushButton到volumeWidget,objectName修改為silenceBtn,mimimumSize和
maximumSize的寬? 修改為80*45
拖拽?個QLabel到volumeWidget,objectName修改為volumeRatio,mimimumSize和
maximumSize的高修改為30,QLabel的alignment屬性修改為水平和垂直居中。
拖拽?個QWidget到volumeWidget,objectName修改為sliderBox。geometry修改為:[(0,0),
80*225]
③ sliderBox內部:
拖拽?個QFrame,objectName修改為inSlider,geometry修改為[(38, 25), 4*180]。
拖拽?個QFrame,objectName修改為outSlider,geometry修改為[(38, 25), 4*180]。
拖拽?個QPushButton,objectName修改為sliderBtn,geometry修改為[(33, 20), 14*14],
mimimumSize和 maximumSize的寬高14*14。

適當修改格式:

五、界面設置

在volumetool.cpp中:

#include "volumetool.h"
#include "ui_volumetool.h"
#include <QGraphicsDropShadowEffect>VolumeTool::VolumeTool(QWidget *parent): QWidget(parent), ui(new Ui::VolumeTool)
{ui->setupUi(this);setWindowFlags(Qt::Popup | Qt::FramelessWindowHint| Qt::NoDropShadowWindowHint);// 在windows上,設置透明效果后,窗?需要加上Qt::FramelessWindowHint格式// 否則沒有控件位置的背景是??的// 由于默認窗?有陰影,因此還需要將窗?的原有的陰影去掉,窗?需要加上Qt::NoDropShadowWindowHintsetAttribute(Qt::WA_TranslucentBackground);// ?定義陰影效果QGraphicsDropShadowEffect* shadowEffect = new QGraphicsDropShadowEffect(this);shadowEffect->setOffset(0, 0);shadowEffect->setColor("#646464");shadowEffect->setBlurRadius(10);setGraphicsEffect(shadowEffect);// 給按鈕設置圖標ui->silenceBtn->setIcon(QIcon(":/images/volumn.png"));// ?量的默認??是20ui->outSlider->setGeometry(ui->outSlider->x(), 180 - 36 - 25, ui->outSlider->width(), 20);ui->sliderBtn->move(ui->sliderBtn->x(), ui->outSlider->y() - ui->sliderBtn->height()/2);ui->volumeRatio->setText("20%");
}VolumeTool::~VolumeTool()
{delete ui;
}

setIcon是設置按鈕圖標的函數

六、頁面創建及彈出

?量調節屬于主界面上元素,因此在QQMusic類中需要添加VolumeTool的對象,在initUi中new該類 的對象。 主界面中?量調節按鈕添加clicked槽函數。
// qqmusic.h中新增
#include "volumetool.h"
VolumeTool* volumeTool;// qqmusic.cpp中新增
void QQMusic::initUi()
{
// ...
// 創建?量調節窗?對象并掛到對象樹
volumeTool = new VolumeTool(this);
}void QQMusic::on_volume_clicked()
{
// 先要調整窗?的顯?位置,否則該窗?在主窗?的左上?// 1. 獲取該按鈕左上?的圖標QPoint point = ui->volume->mapToGlobal(QPoint(0,0));// 2. 計算volume窗?的左上?位置// 讓該窗?顯?在?標點擊的正上?// ?標位置:減去窗?寬度的?半,以及?度恰巧就是窗?的左上?QPoint volumeLeftTop = point - QPoint(volumeTool->width()/2, volumeTool->height());// 微調窗?位置volumeLeftTop.setY(volumeLeftTop.y()+30);volumeLeftTop.setX(volumeLeftTop.x()+15);// 3. 移動窗?位置volumeTool->move(volumeLeftTop);// 4. 將窗?顯?出來volumeTool->show();
}

七、繪制三角

// volumetool.h中新增
void paintEvent(QPaintEvent *event);// volumetool.cpp中新增
#include <QPainter>void VolumeTool::paintEvent(QPaintEvent *event)
{(void)event;// 1. 創建繪圖對象QPainter painter(this);// 2. 設置抗鋸?painter.setRenderHint(QPainter::Antialiasing, true);// 3. 設置畫筆// 沒有畫筆時:畫出來的圖形就沒有邊框和輪廓線painter.setPen(Qt::NoPen);// 4. 設置畫刷顏?painter.setBrush(Qt::white);// 創建?個三?形QPolygon polygon;polygon.append(QPoint(30, 300));polygon.append(QPoint(70, 300));polygon.append(QPoint(50, 320));// 繪制三?形painter.drawPolygon(polygon);
}

效果展示:

大家多多支持~一鍵三連~~~

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

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

相關文章

wstool和git submodule優劣勢對比

wstool 和 git submodule 都可以用來管理項目中的外部源代碼依賴&#xff0c;但它們的設計理念、工作流程和適用場景有很大不同。 我們來深入對比一下它們的優勢和劣勢。 核心理念比喻 git submodule&#xff1a;像是在你的汽車設計圖紙中&#xff0c;直接嵌入了另一家公司&…

六、RuoYi-Cloud-Plus OSS文件上傳配置

1.前面我們完成了RuoYi-Cloud-Plus 部署及啟動&#xff0c;此刻已經可以正常訪問。 前面文章的專欄內容在這&#xff0c;感興趣可以看看。 https://blog.csdn.net/weixin_42868605/category_13023920.html 2.但現在雖然已經啟動成功&#xff0c;但有很多功能我們依舊用不了&a…

達夢數據庫日常運維命令

查詢數據庫表空間數據文件使用大小限制DECLARE K INT:(SELECT cast(PAGE()/1024 as varchar)); BEGIN SELECTF."PATH" 數據文件 ,F.CLIENT_PATH,G.NAME 所屬表空間,F.MAX_SIZE||M 文件擴展限制,(CASE F.AUTO_EXTEND WHEN 1 THEN 是 ELSE 否 END) 文件…

使用線性降維方法進行數據降維

在數據科學與機器學習的領域中&#xff0c;維度災難問題經常導致模型的性能下降。線性降維方法是一種常見的技術&#xff0c;用于在保留盡可能多的原始數據特征的同時&#xff0c;減少數據集的維度。這些方法通過將高維數據映射到低維空間來減少特征數量&#xff0c;從而加速模…

OpenCV圖像裁剪與 ROI 操作

在圖像處理領域&#xff0c;ROI&#xff08;Region of Interest&#xff09;區域感興趣操作是非常基礎而重要的一環。無論是進行目標檢測、圖像分割&#xff0c;還是簡單的圖像處理&#xff0c;都離不開對圖像某一區域的選取與處理。本文將結合 OpenCV 的 C 接口&#xff0c;詳…

關于AI應用案例計算機視覺、自然語言處理、推薦系統和生成式AI四大領域的詳細技術分析。

一、計算機視覺應用&#xff1a;實時物體檢測 案例描述&#xff1a;使用YOLOv8模型實現實時物體檢測系統&#xff0c;應用于安防監控場景。 1. 代碼示例&#xff08;Python&#xff09; python from ultralytics import YOLO import cv2# 加載預訓練模型 model YOLO("…

各個網絡層擁有的協議簡寫

OSI 七層模型&#xff08;從下到上分別為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層&#xff09;是網絡通信的經典理論框架&#xff0c;每層都有其核心功能和對應的協議。以下是各層的主要協議列舉&#xff1a;1. 物理層&#xff08;Physical Layer&#xff…

django基于Python的設計師作品平臺的數據可視化系統設計與實現

django基于Python的設計師作品平臺的數據可視化系統設計與實現

等保測評-RabbitMQ中間件

RabbitMQ-docker部署查看版本&#xff1a;rabbitmqctl version、rabbitmqctl status | grep version配置文件&#xff1a;一般為rabbitmq.conf端口號&#xff1a;一般為15672一、身份鑒別a&#xff09;應對登錄的用戶進行身份標識和鑒別&#xff0c;身份標識具有唯一性&#xf…

Linux操作系統從入門到實戰(十六)馮諾依曼體系結構,操作系統與系統調用和庫函數概念

Linux操作系統從入門到實戰&#xff08;十六&#xff09;馮諾依曼體系結構&#xff0c;操作系統與系統調用和庫函數概念前言一、馮諾依曼體系結構1. 馮諾依曼體系是什么&#xff1f;2. 核心部件有哪些&#xff1f;3. 數據是怎么跑的&#xff1f;4. 發文件的流程也一樣5. 為什么…

廣東省省考備考(第七十二天8.10)——言語理解與表達、判斷推理(強化訓練)

小模考&#xff08;言語、常識&#xff09; 錯題解析 本題可從第二空入手。轉折前后語意相反&#xff0c;轉折前指出“投資對經濟拉動只能發揮短期的作用”&#xff0c;故轉折后應表達“最終消費對經濟拉動才能發揮長期的作用”。A項“持久”、D項“長期”均符合文意&#xff0…

數據庫刪除術:邏輯刪除 vs 物理刪除,選錯毀所有

你以為刪除數據就是點個按鈕&#xff1f;背后藏著數據安全的生死抉擇&#xff01; 本文揭秘兩種刪除方式的本質區別&#xff0c;用真實案例教你避免災難性數據丟失。一、刪除的本質:數據消失的兩種方式 &#x1f9ea; #mermaid-svg-pVylRd9e5p4VE5G0 {font-family:"trebuc…

【Python 小腳本·大用途 · 第 3 篇】

1. 痛點 100 字 硬盤里散落著 IMG_2024(1).jpg、IMG_2024(1) (1).jpg、下載目錄里同名但大小不同的視頻…… 手動比對既耗時又容易誤刪。今天用 30 行 Python 腳本&#xff0c;基于「內容哈希」一鍵找出并刪除重復文件&#xff0c;支持多目錄遞歸、白名單、空目錄清理。2. 腳本…

【網絡與爬蟲 52】Scrapyd-k8s集群化爬蟲部署:Kubernetes原生分布式爬蟲管理平臺實戰指南

關鍵詞: Scrapyd-k8s, Kubernetes爬蟲部署, 容器化爬蟲管理, 云原生數據采集, 分布式爬蟲集群, Docker爬蟲, K8s工作負載, Scrapy部署自動化 摘要: 本文深入解析Scrapyd-k8s這一革命性的Kubernetes原生爬蟲管理平臺&#xff0c;通過費曼學習法從傳統部署痛點出發&#xff0c;詳…

Spring WebSocket安全認證與權限控制解析

一、認證架構設計 1.1 WebSocket安全認證流程 #mermaid-svg-23pyTyZe6teZy3Hg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-23pyTyZe6teZy3Hg .error-icon{fill:#552222;}#mermaid-svg-23pyTyZe6teZy3Hg .error-t…

復現論文《多無人機協同任務分配算法設計與實現》

1. 論文標題 多無人機協同任務分配算法設計與實現 The Design and Implementation of Multi-UAVs Cooperative Task Assignment Algorithm 2. 內容概括 該論文針對異構多無人機協同執行多目標多類型任務時的分配問題展開研究。首先提出“兩階段”任務分配結構:第一階段通過…

MCU-基于TC397的啟動流程

TC397的啟動流程(Start Sequence) 整體啟動流程包括固件啟動(Boot Firmware)和 Bootloader 和軟件啟動(Application start-up software)三個階段。 1. Boot Firmware:是芯片上電后最開始執行的代碼,代碼由英飛凌供應商固化在BootRom中的,不可編程,沒辦法對BootRom中的…

單片機畢業設計模板|畢設答辯|畢業設計項目|畢設設計|單片機物聯網畢業設計|基于STM32單片機的紗管圖像識別系統設計

畢業設計題目&#xff1a;基于STM32單片機的紗管圖像識別系統設計1. 需求分析目標用戶&#xff1a;紡織行業&#xff0c;自動化生產線&#xff0c;質量檢測等。核心功能&#xff1a;實時識別和檢測紗管的外觀缺陷&#xff08;如破損、色差等&#xff09;。提供數據記錄和報告功…

谷歌DeepMind發布Genie 3:通用型世界模型,可生成前所未有多樣化的交互式虛擬環境

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

202506 電子學會青少年等級考試機器人二級理論綜合真題

更多內容和歷年真題請查看網站&#xff1a;【試卷中心 -----> 電子學會 ----> 機器人技術 ----> 二級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 2025年6月 青少年等級考試機器人理論真題二級 第 1 題 如圖&#xff0c;這是中國古代發明的指南車模型&am…