多个类操作同一个Ui界面的方法(音乐播放器前期总结)

2023-11-09

最近自己在做类似于QQ音乐的播放器,用Qt模仿它的界面去写的。本地音乐播放功能差不多实现,除了歌词。

现在已实现的功能:(1)本地歌曲播放

                                 (2)播放,暂停,下一首,上一首

                                 (3)从文件夹添加歌曲至本地歌曲列表并显示 

                                  同时添加至数据库,数据库保存歌曲 id,歌曲地址,歌曲名,作者,专辑   

                                 (4)进度条随播放时间移动

                                 (5) 能拖动播放进度条并且显示拖动的位置上歌曲时间

                                 (6)显示总的播放时间以及当前已播放时间
                                 (7)添加歌曲时有歌曲查重功能,重复添加无效
                                 (8)开机应用开启时自动从数据库读取所有本地歌曲信息并显示再在播放列表
                 
                   界面做的比较难看,但作为新手尽力了
随着代码逐渐累积,我在想再一个类内写代码增加了代码的耦合性,也不利于代码的维护和扩展,所以我想能不能把ui界面下不同的区域给不同的类去做,比如播放控制栏,所有的界面,比如本地下载和下载界面之类的,它们的播放控制栏都是一样的,所以只要单独为播放控制栏写一个类就行了,免得每写一个界面都得重写一次。那么就涉及到一个问题,如何多个类控制一个ui界面
经过上午的构思,我写了一个简单的test,发现是可行的。(完全没有参照网上的想法,纯粹自己想的,所以有些想的不周到的地方还请大家不要见笑)

  解释一下想法,mywidge.h内声明了Ui::MyWidget *ui,这个时候ui是什么都没有的,它只是相当于告诉编译器我有这个类型的变量,

至于具体什么类型,内存分配之类到mywidget.cpp再说,至于mywidget.h里它为什么能用这个类型,因为上面namespace已经声明了。

转到mywidget.cpp来,可以看到MyWidget类的构造函数的初始化列表有个ui(new Ui::MyWidget);现在ui就不是空的了,它已经被初始化了,

这个类型具体的定义和内部构造可以打开ui_mywidget.h头文件,里面放了很多关键的东西,比如你放在ui界面下的部件的初始化,

将界面部件信号和转到槽生成的槽函数自动连接等等,不细说。以上都是你生成Qt Application项目就会自动帮你做好的,

下面是具体的如何多个类控制一个ui

   假设mywidget.hmywidget.cpp都是将军,他们高高在上,具体的琐事有小兵去做,而将军要做的就是生成一个个执行他们命令的小兵,

mywidget.cpp里的one *menu = new one(ui);在产生小兵的同时把将军对界面控制权分给他们,他们就也能对界面去做修改了。

当然写博客的时候我也想到一个问题,把整个ui界面的控制权给其他类是否合适?这也就意味着其他类能做超越本身职权的事情,

例如操作播放控制栏的类也可以操作界面其他地方,所以是不是可以只传给它能操作的界面指针进去更合适。

   这是我写音乐播放器前期的一点小感悟,分享出来,不吝赐教。也希望能帮到其他人。

   不积跬步无以致千里,总结项目能帮助我理清思路,直视盲点,获得更多经验与知识。  

代码如下
(1)mywidget.h(随着ui一起生成的类的头文件)
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

namespace Ui {
class MyWidget;
}

class one;
class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();

private:
    Ui::MyWidget *ui;
    one *menu;
};

#endif // MYWIDGET_H
(2)mywidget.cpp
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QPushButton>
#include <one.h>

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    menu = new one(ui);

}

MyWidget::~MyWidget()
{
    delete ui;
}
(3)one.h
#ifndef ONE_H
#define ONE_H
#include <QWidget>
namespace Ui {
class MyWidget;
}
class one:public QWidget
{
    Q_OBJECT
public:
    explicit one(Ui::MyWidget *ui);
signals:
public slots:
private:
    Ui::MyWidget *oneui;
};
#endif // ONE_H
(4)one.cpp
#include "one.h"
#include "ui_mywidget.h"

one::one(Ui::MyWidget *ui)
{
    oneui = ui;
}




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个类操作同一个Ui界面的方法(音乐播放器前期总结) 的相关文章

  • SLOT专业术语

    slot专业术语 要学习slot的知识首先要了解slot的一些专业术语 下面我们就列举一些slot的专业术语并给大家一一详细说明 现在大多数slot是三行五列的 我们就以三行五列 243lines的slot距离说明各种slot术语 上图出自
  • Wireshark网络抓包工具

    Wireshark工具 1 Wireshark软件简介 2 Wireshark下载 3 Wireshark安装 4 页面介绍 5 常用功能介绍 5 1 网络接口选择 5 2 抓包规则设定 5 3 查找目标数据包 5 4 快速选择过滤数据包
  • TP6的服务在自定义composer包中如何使用

    官方关于Service的说明文档 https www kancloud cn manual thinkphp6 0 1037490 做下概念说明 Service和Provider在TP6中扮演着不同的角色 Service是用于封装特定功能的
  • web 前端学习线路图

    web 前端学习线路图 一 HTML 教程 HTML教程 HTML简介 HTML编辑器 HTML基础 HTML元素 HTML属性 HTML标题 HTML段落 HTML样式 HTML格式化 HTML引用元素 HTML计算机代码元素 HTML注
  • 人工智能学习历程数学篇-概率论(1)

    人工智能学习历程数学篇 概率论 1 概率论基础 随机变量 概率论的一切定义的基础都来源于随机变量 那么何为随机变量呢 所谓的随机变量变量 X 并不代表一个具体的数字 而是一种概率分布 我们可以这样理解随机变量X 当你每次去看随机变量数据的具
  • java stringbuffer 赋值_Java常用类(String, StringBuffer, StringBuilder)

    一 String类 String的实例化方式 通过字面量定义的方式 String str hello world 通过new 构造器的方式 String str new String hello world 面试题 String s new
  • python读取excel某一区域单元格的内容

    sheet1 row values 0 6 10 取第1行 第6 10列 不含第10表 sheet1 col values 0 0 5 取第1列 第0 5行 不含第5行 sheet1 row slice 2 0 2 获取单元格值类型和内容
  • 【链表】循环链表知识点-内含代码基本操作及其说明

    目录 一 概念 二 循环链表基本操作 初始化 头插 插在最前面 尾插 查找数据 获取val的前驱 获得后继 删除数据 删除某位置的值 输出数据 判断plist是否为空链表 没有数据节点 获取plist长度 数据节点的个数 插入数据 获取pl
  • 最短路径算法 迪杰斯特拉、佛洛依德和贝尔曼

    最短路径算法 迪杰斯特拉算法 佛洛依德算法 迪杰斯特拉算法 迪杰斯特拉算法用来解决在有向有权图中某一个点到任意一点的最短路径问题 注意 只能用来解决权为非零的情况 不能够解决权为负数的情况 思想 我是一个搬运工 思想就不讲了 主要是代码 d
  • Vue基础入门---Vue-router

    简介 由于Vue在开发时对路由支持的不足 后来官方补充了vue router插件 它在Vue的生态环境中非常重要 在实际开发中只要编写一个页面就会操作vue router 要学习vue router就要先知道这里的路由是什么 这里的路由并不
  • vps用途

    VPS用途 1 虚拟主机空间 VPS主机非常适合为中小企业 小型门户网站 个人工作室 SOHO一族提供网站空间 较大独享资源 安全可靠的隔离保证了用户对于资源的使用和数据的安全 2 电子商务平台 VPS主机与独立服务器的运行完全相同 中小型
  • STL教程5-STL基本概念及String和vector使用

    活动地址 毕业季 进击的技术er 夏日炎炎 热浪中我们迎来毕业季 这是告别 也是迈向新起点的开始 CSDN诚邀各毕业生 在校生 职场人讲述自己的毕业季故事 分享自己的经验 技术er的进击之路 等你来书写 你可以选择适合自己的对应身份从以下相
  • Calendar根据当前(指定)日期取出指定时间

    以下为亲测 持续更新 一 Calendar根据当前 指定 日期取出本周一本周日和下周一下周日时间 根据Calendar java中定义的DAY OF WEEK来看 Field number for code get code and cod
  • 【LeetCode104】二叉树的最大深度(递归+迭代)

    题目描述 首刷自解 int maxDepth TreeNode root if root nullptr return 0 return max maxDepth root gt left maxDepth root gt right 1
  • k-means算法Python实现--机器学习ML

    k means algorithm 一些概念 partial clustering 每一簇的数据不重叠 至少一簇一个数据 hieraichical clustering 通过构建层次结构来确定聚类分配 density based clust
  • 设计模式-访问者模式

    1 访问者模式被称为最复杂的设计模式 访问者模式访问者模式 Visitor pattern 是一种将数据结构与数据操作分离的设计模式 是指封装一些作用于某种数据结构中的各元素的操作 它可以在不改变数据结构的前提下定义作用于这些元素的新的操作
  • png透明通道分离

    关于photoshop中png打开问题 前面也说到过http blog csdn net shenmifangke article details 52638716 ps在打开png格式图片的时候 实际上是把透明通道应用到了所有通道上 这样
  • IndentationError: unindent does not match any outer indentation level

    IndentationError unindent does not match any outer indentation level 遇到这个错误 是因为新的Python语法中是不支持的代码对齐中 混用TAB和空格的 解决方法 使用工具
  • 【C语言】之实现闰年判断

    文件名 leapYear c 功能 任意输入一个年份 判断其是否为闰年 编辑人 王廷云 include
  • VB+SQL银行设备管理系统设计与实现

    摘要 随着银行卡的普及 很多地方安装了大量的存款机 取款机和POS机等银行自助设备 银行设备管理系统可以有效的记录银行设备的安装和使用情况 规范对自助设备的管理 从而为用户提供更加稳定和优质的服务 本文介绍了银行设备管理系统的设计和开发过程

随机推荐

  • ooad设计模型

    设计模式 Design pattern 是一套被反复使用 多数人知晓的 经过分类编目的 代码设计经验的总结 使用设计模式是为了可重用代码 让代码更容易被他人理解 保证代码可靠性 毫无疑问 设计模式于己于他人于系统都是多赢的 设计模式使代码编
  • 前端之vue3使用动画库animate.css(含动画、过渡)

    动画与过渡 一 动画效果 1 默认动画 实例 动画语法 2 给transition指定name 二 过渡效果 三 多个元素过渡 四 vue3使用动画库 动画库animate css 五 总结 一 动画效果 1 默认动画 实例
  • github怎么自动更新被人更新过的项目_新出炉的免费开源平台,GitHub官方出品

    软件名称 GitHub Desktop 2 2 4 安装环境 Windows 下载链接 下载链接 https www sssam com 10822 html 软件简介 GitHub是一个面向开源及私有软件项目的托管平台 因为只支持git
  • 前端实现websocket(vue3)

    在config index js文件中配置一下websocket websocket的域名和端口号的配置 const BASE URL localhost const WS PORT 8080 const WS ADDRESS ws BAS
  • linux 查看连接数,并发数

    软连接 ln s home ictfmcg data photo var jtnd data photo tomcat 6的Connector配置如下
  • MAX30102 高灵敏度脉搏氧器和心率传感器说明书

    MAX30102 一 简介 MAX30102是一个集成的脉搏血氧测量和心率监测模块 它包括内部led 光电探测器 光学元件和具有环境光排斥作用的低噪声电子器件 MAX30102提供了一个完整的系统解决方案 以简化移动和可穿戴设备的设计过程
  • 【Hadoop 01】简介

    目录 1 Hadoop 简介 2 下载并配置Hadoop 2 1 修改 etc profile 2 2 修改hadoop env sh 2 3 修改core site xml 2 4 修改hdfs site xml 2 5 修改mapred
  • MySQL —— 基本查询

    文章目录 1 向表中插入数据 2 查询操作 2 1 全列查询 2 2 指定列查询 2 3 查询字段带表达式 2 4 为查询结果指定别名 2 5 去重操作 3 where 条件 3 1 比较运算符和逻辑预算符的运用 3 2 like的细节 3
  • 关于树莓派的VNC连接

    在使用树莓派时 会经常由于条件限制 无法配置全套外设 如显示器 键盘 鼠标 而需要用到手机或者电脑进行远程连接 树莓派除了支持putty进行SSH连接外 还可以通过tightvnc进行VNC连接 下面介绍一下两种远程连接方式的使用方法 1
  • uni-app接入uview-ui组件详细说明,希望对称有所帮助

    1 uni app 引入uViewUI uViewUI官方地址 https uviewui com 安装 如果您的根目录没有package json文件的话 请先执行如下命令 npm init y npm install uview ui
  • vue 实现简单表格分页功能

    使用框架实现表格展示和跳转功能 一直不懂原理 所以自己写一个简单的 加深理解 布局分为2块 上面是表格展示数据 下面是点击按钮跳转 效果图 代码
  • 利用神经网络识别12306验证码——(五)训练模型

    需要训练的有两个模型 一个是文本识别模型 一个是图像识别模型 在训练的时候 尝试了ResNet50 ResNet101 MobileNetV2 三种模型 前两个残差神经网络模型的参数比较大 训练比较耗时 精度上也逊色于第三个模型 尝试了RT
  • Android7.0以上自动更新安装apk

    Android7 0以上加了很多特性 也对系统做了很多的优化和升级 而在对Uri的访问上也做了改变 以下用安装apk的例子来说明 对于程序 我们要实现程序能够自动检查更新安装 我们需要给程序赋予权限
  • 狼人杀服务器维护时间,狼人杀官 方将于11月30日进行停机维护

    狼人杀官 方将于11月30日进行停机维护 此次更新将更改一些设定 新增活动和关闭前面的活动 优化和修复一下问题 狼友们可以了解一下更新内容 亲爱的狼队友 为了保证服务器的稳定和服务质量 我们将于2017年11月30日10 00进行停机维护工
  • LeetCode算法题合集—链表篇

    链表基础算法题 链表的定义 java 单链表的定义 public class ListNode int val ListNode next 指向下一节点 ListNode 无参构造 ListNode int val this val val
  • 封玩家IP和机器码以及解开被封的教程

    封玩家IP和机器码以及解开被封的教程 关于封玩家IP地址的方法 可能在十多年前的第一代传奇引擎上就有了 但封机器码的功能 是GOM以后才看到的 早先的引擎上面并没有这个功能 比如HERO或者LEG等 虽然十多年前就有 但还是有不少GM 在开
  • Photomatix Pro for Mac HDR图像处理器

    Photomatix Pro是一款专业的HDR 高动态范围 照片处理软件 可以帮助用户将多张不同曝光度的照片合成一张高质量的HDR照片 并提供了丰富的HDR处理工具和效果 可以让用户轻松地创建出令人惊叹的HDR照片 Photomatix P
  • tesseract 训练---别人的东东

    关于tesseract ocr3的训练和使用 众所周知 这是一个出色的字符识别软件 这个开源项目可以在http code google com p tesseract ocr downloads list下载 在使用时 建议使用3而不要使用
  • OBS CLR插件开发

    本文所述的OBS 插件编写基于OBS CLRHostPlugin 使用C 语言写成 IDE为VS2012 完整代码详见Github 仓库地址 Part 创建工程 首先创建一个C 的项目 项目类型为类库 ClassLibrary 使用 NET
  • 多个类操作同一个Ui界面的方法(音乐播放器前期总结)

    最近自己在做类似于QQ音乐的播放器 用Qt模仿它的界面去写的 本地音乐播放功能差不多实现 除了歌词 现在已实现的功能 1 本地歌曲播放 2 播放 暂停 下一首 上一首 3 从文件夹添加歌曲至本地歌曲列表并显示 同时添加至数据库 数据库保存歌