当前位置: 首页 > news >正文

使用Qt制作网易云播放器的歌曲排行界面

!!!直接上图!!!
!!!直接上图!!!
!!!直接上图!!!

网易云排行榜的歌曲排行界面
在这里插入图片描述下面是我制作的效果,因为仿制网易云还没做完,截个部分图,感兴趣的朋友可以关注我之后的文章!!!

第三列的数据可以设置左对齐之后就和上图的效果一样了,但是我觉得中心对齐好看。

在这里插入图片描述
本篇的目的就是介绍红色方框的界面怎么做

// 接口文件
class IHeaderLessTableWidget: public IService
{
public:virtual ~IHeaderLessTableWidget() {};// 获取Widget指针virtual void* GetWidget() = 0;// 设置表格的行数和列数virtual void SetRowCol(int _row, int _col) = 0;// 更新表格virtual void UpdateTableWidget(const std::vector<std::vector<std::string>>& _table_data) = 0;
};
// 头文件// 自定义委托事件
class CustomDelegate: public QStyledItemDelegate
{
public:void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override{// 如果项被选中,则填充选中色if (option.state & QStyle::State_Selected)painter->fillRect(option.rect, option.palette.highlight());else{// 否则,根据行号设置背景颜色int row = index.row();QColor backgroundColor = (row % 2 == 0) ? QColor("#fafafa") : QColor("#ffffff");painter->fillRect(option.rect, backgroundColor);}// 最后调用父类的 paint 函数绘制项的内容QStyledItemDelegate::paint(painter, option, index);}
};// 自定义表格,禁止双击修改
class CustomTableWidget : public QTableWidget
{
public:CustomTableWidget(QWidget* parent = nullptr) : QTableWidget(parent) {}protected:void mouseDoubleClickEvent(QMouseEvent* event) override{// 空函数体,以禁用鼠标双击事件// 可以在此处添加自定义的处理逻辑}
};class HeaderLessTableWidget : public QObject, public IHeaderLessTableWidget
{Q_OBJECTpublic:HeaderLessTableWidget(QObject *parent = nullptr);~HeaderLessTableWidget();virtual void* GetWidget() override;virtual void SetRowCol(int _row, int _col) override;virtual void UpdateTableWidget(const std::vector<std::vector<std::string>>& _table_data) override;private:void InitGui();void UpdateRow(int _row, std::vector<std::string> _row_data);private:CustomTableWidget* tableWidget_;int row_ = 0;	// 行数int col_ = 0;	// 列数
};
// CPP实现
HeaderLessTableWidget::HeaderLessTableWidget(QObject* parent): QObject(parent), tableWidget_(new CustomTableWidget)
{InitGui();
}HeaderLessTableWidget::~HeaderLessTableWidget()
{}void* HeaderLessTableWidget::GetWidget()
{if (tableWidget_)return (void*)tableWidget_;
}void HeaderLessTableWidget::SetRowCol(int _row, int _col)
{row_ = _row;col_ = _col;tableWidget_->setRowCount(_row);tableWidget_->setColumnCount(_col);
}void HeaderLessTableWidget::UpdateTableWidget(const std::vector<std::vector<std::string>>& _table_data)
{for (int i = 0;i < _table_data.size();i++){UpdateRow(i, _table_data[i]);}
}void HeaderLessTableWidget::InitGui()
{tableWidget_->setItemDelegate(new CustomDelegate());// 隐藏表格中的网格线tableWidget_->setShowGrid(false);// 隐藏列表头tableWidget_->horizontalHeader()->setVisible(false);// 隐藏行表头tableWidget_->verticalHeader()->setVisible(false);// 选中一行tableWidget_->setSelectionBehavior(QAbstractItemView::SelectRows);// 设置控件不接受焦点tableWidget_->setFocusPolicy(Qt::NoFocus);
}void HeaderLessTableWidget::UpdateRow(int _row, std::vector<std::string> _row_data)
{QTableWidgetItem* item1 = new QTableWidgetItem(StdString2QString(_row_data[0]));if(_row < 3)item1->setTextColor(QColor("#ec416a"));elseitem1->setTextColor(QColor("#969696"));item1->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);tableWidget_->setItem(_row, 0, item1);QTableWidgetItem* item2 = new QTableWidgetItem(StdString2QString(_row_data[1]));item2->setTextColor(QColor("#b39393"));item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);tableWidget_->setItem(_row, 1, item2);QTableWidgetItem* item3 = new QTableWidgetItem(StdString2QString(_row_data[2]));item3->setTextColor(QColor("#969696"));item3->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);tableWidget_->setItem(_row, 2, item3);QTableWidgetItem* item4 = new QTableWidgetItem(StdString2QString(_row_data[3]));item4->setTextColor(QColor("#b39393"));item4->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);tableWidget_->setItem(_row, 3, item4);QHeaderView* verticalHeader = tableWidget_->verticalHeader();verticalHeader->setSectionResizeMode(QHeaderView::Stretch);tableWidget_->setColumnWidth(0, 30);tableWidget_->setColumnWidth(1, 60);tableWidget_->setColumnWidth(2, 304);tableWidget_->setColumnWidth(3, 303);
}

如何使用?

void CreateNewSongTableWidget()
{std::vector<std::vector<std::string>>	newTableData;newTableData.push_back({ "1", "202%", "爱丫爱丫(live)", "汪苏泷" });newTableData.push_back({ "2", "185%", "冷战", "Vinida (万妮达)" });newTableData.push_back({ "3", "302%", "十二月的奇迹(我望眼欲穿)", "呆呆破" });newTableData.push_back({ "4", "108%", "幕后生活", "海洋Bo" });newTableData.push_back({ "5", "128%", "情书", "薛之谦" });std::shared_ptr<IHeaderLessTableWidget> newSongTableWidget_ = std::make_shared<HeaderLessTableWidget>();newSongTableWidget_->SetRowCol(5, 4);newSongTableWidget_->UpdateTableWidget(newTableData);newSongTableWidget_->show();
}

代码非常简单,就不详细介绍了。

相关文章:

使用Qt制作网易云播放器的歌曲排行界面

&#xff01;&#xff01;&#xff01;直接上图&#xff01;&#xff01;&#xff01; &#xff01;&#xff01;&#xff01;直接上图&#xff01;&#xff01;&#xff01; &#xff01;&#xff01;&#xff01;直接上图&#xff01;&#xff01;&#xff01; 网易云排行榜…...

【.NET Core】特性(Attribute)详解

【.NET Core】特性&#xff08;Attribute&#xff09;详解 文章目录 【.NET Core】特性&#xff08;Attribute&#xff09;详解一、概述二、编写自定义属性2.1 自定义特性的主要步骤2.2 应用AttributeUsageAttributeAttributeTargets 成员Inherited属性AllowMultiple属性 三、声…...

【C++】POCO学习总结(十九):哈希、URL、UUID、配置文件、日志配置、动态库加载

【C】郭老二博文之&#xff1a;C目录 1、哈希 1.1 说明 std::map和std::set 的性能是&#xff1a;O(log n) POCO哈希的性能比STL容器更好&#xff0c;大约快两&#xff1b; POCO中对应std::map的是&#xff1a;Poco::HashMap&#xff1b; POCO中对应std::set的是 Poco::Hash…...

1846_安全SPI

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/g_embedded: some embedded basic knowledge. 1846_安全SPI SPI是一种常见的通信方式&#xff0c;在汽车电子中比较常用。但是如果涉及到安全相关的设计&#xff0c;可能得考虑更多。而SPI协议本身没有很好的标准化&am…...

SQL Server ,使用递归查询具有层级关系的数据。

假设我们有一个表格 Employees&#xff0c;其中包含员工的层级关系信息&#xff0c;每一行包括员工的ID、姓名以及上级员工的ID。 下面是一个示例表格及其数据&#xff1a; Employees ---------------------- EmployeeID | Name | ManagerID ---------------------- 1 …...

【参数汇总】mysql服务端/客户端常见优化参数

mysql服务端参数 1、innodb_buffer_pool_size &#xff08;innodb索引buffer pool缓冲区大小&#xff09; 默认大小为128M&#xff0c; 官方推荐其配置为系统内存的 50% 到 75% 。 一般innodb_buffer_pool_size要结合以下两个参数来设置&#xff1a; innodb_buffer_pool_ch…...

LeetCode 142. 环形链表 II

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整…...

Leetcode刷题笔记题解(C++):224. 基本计算器

思路&#xff1a; step 1&#xff1a;使用栈辅助处理优先级&#xff0c;默认符号为加号。 step 2&#xff1a;遍历字符串&#xff0c;遇到数字&#xff0c;则将连续的数字字符部分转化为int型数字。 step 3&#xff1a;遇到左括号&#xff0c;则将括号后的部分送入递归&#x…...

还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis

文章目录 前言一、&#x1f4d6;MyBatis简介1.Mybatis历史2.MyBatis特性3.对比&#xff08;其他持久化层技术&#xff09; 二、&#x1f4e3;搭建MyBatis1.开发环境2.创建maven工程3.创建MyBatis核心配置文件4.创建mapper接口5.创建MyBatis的映射文件6.通过junit测试功能7.加入…...

C# WPF上位机开发(树形控件在地图软件中的应用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们聊过图形软件的开发方法。实际上&#xff0c;对于绘制的图形&#xff0c;我们一般还会用树形控件管理一下。举个例子&#xff0c;一个地图…...

【华为】文档中命令行约定格式规范(命令行格式规范、命令行行为规范、命令行参数格式、命令行规范)

文章目录 命令行约定格式**粗体&#xff1a;命令行关键字***斜体&#xff1a;命令行参数*[ ]&#xff1a;可选配置{ x | y | ... } 和 [ x | y | ... ]&#xff1a;选项{ x | y | ... }* 和 [ x | y | ... ]*&#xff1a;多选项&<1-n>&#xff1a;重复参数#&#xff…...

Trie 字典树(c++)(前缀)

题目链接&#xff1a;用户登录 题目&#xff1a; 样例&#xff1a; 输入 5 3 aaa aba aabbaa abbbbb cdd aabba abc abab 输出 Y N N 思路&#xff1a; 根据题目意思&#xff0c;要用到 Trie 字典树算法。 Trie 字典树&#xff0c;顾名思义&#xff0c;“字典”&#xff0…...

全球移动通信(2G/3G/4G/5G)频谱分布情况

一、概述 随着通信技术的不断发展&#xff0c;全球各国都在积极推进2G、3G、4G、5G网络的建设和应用。根据FCC统计&#xff0c;目前全球移动通信频谱分布如下&#xff1a; 二、分布 &#xff08;一&#xff09;俄罗斯 2G&#xff1a;主要使用900MHz和1800MHz两个频段。其中&…...

【04】GeoScene导出海图或者电子航道图000数据成果

1创建一个带有覆盖面和定义的产品 如果你没有已存在的S-57数据&#xff0c;你可以通过捕捉新的产品覆盖范围&#xff08;多边形产品范围&#xff09;及其所需的产品定义信息&#xff08;产品元数据&#xff09;来为新产品创建基础。 注&#xff1a; 如果你已经有一个S-57数据…...

安卓端出现https请求失败(转)

背景# 某天早上&#xff0c;正在一个会议时&#xff0c;突然好几个同事被叫出去了&#xff1b;后面才知道&#xff0c;是有业务同事反馈到领导那里&#xff0c;我们app里面某个功能异常。 具体是这样&#xff0c;我们安卓版本的app是禁止截屏的&#xff08;应该是app里做了拦…...

appium2.0.1安装完整教程+uiautomator2安装教程

第一步&#xff1a;根据官网命令安装appium&#xff08;Install Appium - Appium Documentation&#xff09; 注意npm前提是设置淘宝镜像&#xff1a; npm config set registry https://registry.npmmirror.com/ 会魔法的除外。。。 npm i --locationglobal appium或者 npm…...

Hbase的Rowkey设计

Hbase的Rowkey设计 rowkey设计 # 1&#xff09;长度原则# 最大64KB&#xff0c;推荐长度10~100 byte# 最好设为8的倍数&#xff0c;能短则短&#xff0c;rowkey如果太长会影响性能。# 2&#xff09;唯一原则&#xff1a;rowkey应该具备唯一性# 3&#xff09;散列原则…...

软考机考考试第一批经验分享

由于机考的特殊性&#xff0c;考试环境与传统笔试环境有所不同。下面是与考试环境相关的总结&#xff1a; 草稿纸&#xff1a;考场提供足够数量的草稿纸&#xff0c;每位考生都会分发一张白纸作为草稿纸。在草稿纸上需要写上准考证号。如果不够用&#xff0c;可以向监考老师再次…...

架构简洁之道有感,谈谈软件组件聚合的张力

配图由腾讯混元助手生成 这篇文章介绍了软件架构设计中组件设计思想&#xff0c;围绕“组件间聚合的张力”这个有意思的角度&#xff0c;介绍了概念&#xff0c;并且结合架构设计示例对这个概念进行了进一步阐述。 组件聚合&#xff1f;张力&#xff1f;这标题&#xff0c;有种…...

计算机网络 网络层上 | IP数据报,IP地址,ICMP,ARP等

文章目录 1 网络层的两个层面2 网络协议IP2.1 虚拟互联网络2.2 IP地址2.2.1 固定分类编址方式2.2.2 无分类编制CIDR2.2.3 MAC地址和IP地址区别 2.3 地址解析协议ARP2.3.1 解析过程 2.4 IP数据报格式 3 IP层转发分组流程4 国际控制报文协议ICMP4.1 ICMP格式结构4.2 分类4.2.1 差…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

HTTPS证书一年多少钱?

HTTPS证书作为保障网站数据传输安全的重要工具&#xff0c;成为众多网站运营者的必备选择。然而&#xff0c;面对市场上种类繁多的HTTPS证书&#xff0c;其一年费用究竟是多少&#xff0c;又受哪些因素影响呢&#xff1f; 首先&#xff0c;HTTPS证书通常在PinTrust这样的专业平…...