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

news2024/9/23 9:34:19

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

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

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

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

// 接口文件
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_OBJECT

public:
	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"));
	else
		item1->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();
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1311374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows本地的RabbitMQ服务怎么在Docker for Windows的容器中使用

1. 进入管理界面 windows安装过程请访问&#xff1a;Windows安装RabbitMQ、添加PHP的AMQP扩展 浏览器访问&#xff1a;http://127.0.0.1:15672/ 2. 创建虚拟主机 上面访问的是 RabbitMQ 的管理界面&#xff0c;可以在这个界面上进行一些操作&#xff0c;比如创建虚拟主机、…

微信小程序 全局共享数据 mobx

前言 全局数据共享&#xff08;又叫做&#xff1a;状态管理&#xff09;是为了解决组件之间数据共享的问题。开发中常用的全局数据共享方案有&#xff1a;Vuex、Redux、MobX 等。 一. 安装 npm install --save mobx-miniprogram4.13.2 mobx-miniprogram-bindings2.1.5 安装完…

深度学习 Day18——P7咖啡豆识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU&#xff08;如果设备上支持GPU就使用GPU,否则使用C…

Linux基本命令操作

一、命令操作快捷键 1.Tab键&#xff1a;自动补齐 2.ctrlL &#xff1a;清屏 二、使用命令获取帮助信息 1. # ls --help 2. # man ls 三、目录和文件管理命令 1. pwd \\显示路径 2. cd \\进入或切换目录 3.​​​​​​​ ls -l \\显示详细信息 4. ​​​​​​​ ls -a \\…

实验02:RIP配置

1.实验目的&#xff1a; 了解路由选择协议&#xff08;Routing Protocol&#xff09;的基本原理及分类&#xff1b;掌握RIP协议的基本原理&#xff1b;实现RIP协议&#xff1b;掌握路由器配置及路由表查看的基本命令。 2.实验内容&#xff1a; 建立拓扑结构&#xff1b;配置…

ArcGIS导入excel中的经纬度信息,绘制矢量

1.首先整理坐标信息 2.其次转成2003格式的excel文件 3.导入arcgis&#xff0c;点击右键添加excel数据 4.显示xy数据 5.显示经度和纬度信息 6&#xff1a;点击【地理坐标系】->【World】->【WGS 1984】->【确定】 7.投影带的确定方式&#xff1a; 因为自己一直…

【已解决】ModuleNotFoundError: No module named ‘taming‘

问题描述 Traceback (most recent call last) <ipython-input-14-2683ccd40dcb> in <module> 16 from omegaconf import OmegaConf 17 from PIL import Image ---> 18 from taming.models import cond_transformer, vqgan 19 import taming.modu…

word四级目录序号不随上级目录序号变化问题解决方法

一、word中的几个元素简介 1、word中的列表 如下图所示&#xff0c;代表word的列表&#xff1a; 2、word中的标题 如下图所示&#xff0c;代表word的标题&#xff1a; 3、word中的编号/序号 如下图所示&#xff0c;代表word的编号/序号&#xff1a; 4、word中的目录 如下图…

卡片C语言(2021年蓝桥杯B)

分析&#xff1a;我们用一个数组来记录卡牌&#xff0c;我们每使用一张卡牌&#xff0c;就减一张&#xff0c;当卡牌数为-1的时候&#xff0c;说明不够用了&#xff0c;此时我们就打印上一个组合的数字。 #include <stdio.h> int main(){int num[10],i,m,n,j;for(i0;i&l…

Centos硬盘操作合集

一、硬盘命令说明 lsblk 列出系统上的所有磁盘列表 查看磁盘列表 参数意义 blkid 列出硬盘UUID [rootzs ~]# blkid /dev/sda1: UUID"77dcd110-dad6-45b8-97d4-fa592dc56d07" TYPE"xfs" /dev/sda2: UUID"oDT0oD-LCIJ-Xh7r-lBfd-axLD-DRiN-Twa…

GoLang 学习 (入门)

go run 1.go 执行命令 go build 1.go 打包为exe 快速 并且无依赖 在开始项目 需要 生成 go.mod go mod init mod 终端执行 go: creating new go.mod: module mod go: to add module requirements and sums:go mod tidy go的基本目录结构 src ------gocode ------------项…

探索GameFi:区块链与游戏的未来融合

在过去的几年里&#xff0c;区块链技术逐渐渗透到各个领域&#xff0c;为不同行业带来了前所未有的变革。其中&#xff0c;游戏行业成为了一个引人注目的焦点&#xff0c;而这种结合被称为GameFi&#xff0c;即游戏金融。GameFi不仅仅是一个概念&#xff0c;更是一场区块链和游…

51单片机(STC8) -- 开发环境搭建(Keil C51)

文章目录 STC8H3K系列芯片概述STC8H3K系列芯片选型Keil C51简介Keil C51安装添加C51芯片包工程创建与编译工程烧录 STC8H3K系列芯片概述 文章中所用的芯片选型为STC8H3K64S4&#xff0c;后续STC8案例均以该芯片展开 内核 • 超高速 8051 内核&#xff08;1T&#xff09;&…

2023-12-14 使用Qt画一条曲线(AI辅助)

点击 <C 语言编程核心突破> 快速C语言入门 使用Qt画一条曲线 前言一、Qchart简介二、代码总结 前言 要解决问题: 有一个函数, 生成一些点, 想画一条曲线. 想到的思路: 这个用Qchart比较简单. 其它的补充: 需要稍许配置 一、Qchart简介 QChart是Qt中的一个图表控件&a…

流程图、泳道图的介绍和示例分享,以及自定义元件库的介绍

目录 一. 流程图介绍 二. Processon使用 新建一个流程图 图形的使用 三. 流程图示例 登录界面 门诊业务流程图 住院业务流程图 药房业务流程图 会议OA流程图 四. 泳道图介绍 五. 自定义元件库 5.1 新建一个元件库 5.2 创建元件 5.3 使用自定义元件库 一. 流程图介…

PythonStudio:一款国人写的python及窗口开发编辑IDE,可以替代pyqt designer等设计器了

本款软件只有十几兆&#xff0c;功能算是强大的&#xff0c;国人写的&#xff0c;很不错的python界面IDE.顶部有下载链接。下面有网盘下载链接&#xff0c;或者从官网直接下载。 目前产品免费&#xff0c;以后估计会有收费版本。主页链接&#xff1a;PythonStudio-硅量实验室 作…

智慧城市/一网统管建设:人员危险行为检测算法,为城市安全保驾护航

随着人们压力的不断增加&#xff0c;经常会看见在日常生活中由于小摩擦造成的大事故。如何在事故发生时进行及时告警&#xff0c;又如何在事故发生后进行证据搜索与事件溯源&#xff1f;旭帆科技智能视频监控人员危险行为/事件检测算法可以给出答案。 全程监控&#xff0c;有源…

Landsat7_C2_ST数据集2019年1月-2022年12月

简介&#xff1a; Landsat7_C2_ST数据集是经大气校正后的地表温度数据&#xff0c;属于Collection2的二级数据产品&#xff0c;以开尔文为单位测量地球表面温度&#xff0c;是全球能量平衡研究和水文模拟中的重要地球物理参数。地表温度数据还有助于监测作物和植被健康状况&am…

2023-12-14 二叉树的最大深度和二叉树的最小深度以及完全二叉树的节点个数

二叉树的最大深度和二叉树的最小深度以及完全二叉树的节点个数 104. 二叉树的最大深度 思想&#xff1a;可以使用迭代法或者递归&#xff01;使用递归更好&#xff0c;帮助理解递归思路&#xff01;明确递归三部曲–①确定参数以及返回参数 ②递归结束条件 ③单层逻辑是怎么样…

NSSCTF-Crypto靶场练习---41-46WP

文章目录 [CISCN 2022 西南]rsa[HDCTF 2023]爬过小山去看云[LitCTF 2023]md5的破解[CISCN 2023 初赛]Sign_in_passwd[CISCN 2021初赛]rsa[GWCTF 2019]babyRSA [CISCN 2022 西南]rsa 都是迷惑的东西&#xff0c;别看&#xff0c;注意关键的pow就好。 求 P-1 和 Q-1 的lcm 最小公…