1.HTTP  网

1.头文件 :

网络

/***** HTTP 网络相关模块 *****/
#include <QNetworkAccessManager>    /** 网络访问类 **/
#include <QNetworkRequest>          /** 网络请求数据类 **/
#include <QNetworkReply>            /** 网络结果数据类 **/
#include <QUrl>                     /** 网络超链接类 **/

JSON  (因为传输的数据都是  JSON 类型,所以我们需要利用 jSOn 解析)

#include <QJsonDocument>    /** 解析JSON的类 **/
#include <QJsonObject>      /** JSON的类 **/
#include <QJsonArray>       /** JSON的数组类 **/
#include <QJsonValue>       /** JSON的各种值类 **/

2. 两种请求的方法

函数:get(QNetworkRequest(url));  //参数1  请求的链接

post(QNetworkRequest(url),data.toUtf8());//参数1 请求的链接, 参数2 一个字符串

3.学习怎么用网络请求

4.建立一个对象,并且实列化

QNetworkAccessManager *m_http;  /** 网络访问类 对象 **/m_http = new QNetworkAccessManager(this);//实列化

5.建立 信号接收数据的链接

connect(m_http,SIGNAL(finished(QNetworkReply*)),this,SLOT(slot_http_finished(QNetworkReply*)));

finished(QNetworkReply*) 是一个信号,他是网络上有数据可以接收,

slot_http_finished(QNetworkReply*) 是自己的槽函数

6.开始向网络请求 拿到数据

利用上面的两个函数:(两种方法)


void MainWindow::slot_pushButton_request()
{QString city = ui->lineEdit_city->text();QUrl url = QString("http://query.asilu.com/weather/baidu/?city=%1").arg(city);//请求天气的链接
#if 0/**** HTTP的get请求 ****/m_http->get(QNetworkRequest(url));//第一种
#else/**** HTTP的post请求 ****/QString data;m_http->post(QNetworkRequest(url),data.toUtf8());//第二种
#endif
}

7.当有数据来的时候 接收数据

  QByteArray data = Reply->readAll(); // 接收数据

8. 解析代码 使用 JSON

函数  QJsonDocument::fromJson(data);   //把 QByteArray  变成  QJsonDocument 类型

QJsonObject JsonObject= JsonDocument.object(); /***.objext 转换成JSON对象 ***/

QJsonArray JsonArray = JsonObject["weather"].toArray(); /*** toArray 转换成JSON数组 ***/

xxx.toString  ///转换为字符串

可以请求的网站链接: 自己找吧!!(搜索,HTTP  请求 xxx 的接口API 就可以了)

所有的代码:

ui 设计界面

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
/***** HTTP 网络相关模块 *****/
#include <QNetworkAccessManager>    /** 网络访问类 **/
#include <QNetworkRequest>          /** 网络请求数据类 **/
#include <QNetworkReply>            /** 网络结果数据类 **/
#include <QUrl>                     /** 网络超链接类 **/QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;QNetworkAccessManager *m_http;  /** 网络访问类 对象 **/
public slots:void slot_http_finished(QNetworkReply* Reply);void slot_pushButton_request();
};
#endif // MAINWINDOW_H

.cpp 文件

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);/*** 申请网络访问类对象空间 ***/m_http = new QNetworkAccessManager(this);/*** 网络访问类有数据可读信号(完成请求) ***/connect(m_http,SIGNAL(finished(QNetworkReply*)),this,SLOT(slot_http_finished(QNetworkReply*)));connect(ui->pushButton_request,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_request()));
}void MainWindow::slot_pushButton_request()
{QString city = ui->lineEdit_city->text();QUrl url = QString("http://query.asilu.com/weather/baidu/?city=%1").arg(city);
#if 0/**** HTTP的get请求 ****/m_http->get(QNetworkRequest(url));
#else/**** HTTP的post请求 ****/QString data;m_http->post(QNetworkRequest(url),data.toUtf8());
#endif
}#include <QJsonDocument>    /** 解析JSON的类 **/
#include <QJsonObject>      /** JSON的类 **/
#include <QJsonArray>       /** JSON的数组类 **/
#include <QJsonValue>       /** JSON的各种值类 **/
void MainWindow::slot_http_finished(QNetworkReply *Reply)
{QByteArray data = Reply->readAll(); // 接收数据QJsonDocument JsonDocument = QJsonDocument::fromJson(data); //解析JSONif(JsonDocument.isObject() == true){//ui->textBrowser_JSON->setText(JsonDocument.toJson()); //转换成JSON格式的字符串方便显示QJsonObject JsonObject= JsonDocument.object(); /*** 转换成JSON对象 ***//*** 清空JSON结果框 ***/ui->textBrowser_JSON->clear();ui->textBrowser_JSON->append(QString("城市:") + JsonObject["city"].toString());ui->textBrowser_JSON->append(QString("日期:") + JsonObject["date"].toString());ui->textBrowser_JSON->append(QString("时间:") + JsonObject["update_time"].toString());QJsonArray JsonArray = JsonObject["weather"].toArray(); /*** 转换成JSON数组 ***/QString times[] = {"今天:","明天:","后天:","大后天:","大大后天:"};for(int i = 0; i < 5;i++){QJsonObject JsonObject = JsonArray[i].toObject();ui->textBrowser_JSON->append(times[i] + JsonObject["temp"].toString());}}
}MainWindow::~MainWindow()
{delete ui;
}



2. 串口连接

1.头文件:

/***** 串口模块 ******/
#include <QSerialPort> //串口类
#include <QSerialPortInfo> //串口属性类 { 获取系统可用的串口 }

2.建立对象并且实列化对象:

QSerialPort *SerialPort; /** 串口类 **/SerialPort = new QSerialPort(this);//实列化对象

3.各种函数

   /*** 类构造时就获取系统可用串口列表 ***/GetSystenSerilPort();/***  写入数据 ***/write(text.toUtf8());/*** 读取数据 ***/readAll();/******* 设置串口属性 ******/SerialPort->setPortName(ui->comboBox_portName->currentText()); //设置串口号SerialPort->setBaudRate(ui->comboBox_BaudRate->currentText().toInt()); //设置波特率SerialPort->setDataBits(QSerialPort::Data8); //设置数据位为8位SerialPort->setParity(QSerialPort::NoParity); //设置校验位为无校验SerialPort->setStopBits(QSerialPort::OneStop); //设置停止位为1位/***** 打开串口 ****/bool ok = false;ok = SerialPort->open(QIODevice::ReadWrite);/**  关闭串口 **/SerialPort->close(); //关闭串口

4.首先是配置串口属性

/******* 设置串口属性 ******/
    SerialPort->setPortName(ui->comboBox_portName->currentText()); //设置串口号
    SerialPort->setBaudRate(ui->comboBox_BaudRate->currentText().toInt()); //设置波特率
    SerialPort->setDataBits(QSerialPort::Data8); //设置数据位为8位
    SerialPort->setParity(QSerialPort::NoParity); //设置校验位为无校验
    SerialPort->setStopBits(QSerialPort::OneStop); //设置停止位为1位

5.打开串口

bool ok = false;
 ok = SerialPort->open(QIODevice::ReadWrite);

6.写数据

void MainWindow::slot_pushButton_send()
{QString text = ui->lineEdit_send->text();//获取要发送的数据SerialPort->write(text.toUtf8());//发送数据
}

7.建立读取数据的信号连接,当数据来的时候,就可以知道有数据可以读取。

connect(SerialPort,SIGNAL(readyRead()),this,SLOT(slot_SerialPort_readyRead()));

参数1  出口类指针,  参数2  信号,

8.关闭串口,

SerialPort->close(); //关闭串口


ui设计界面

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
/***** 串口模块 ******/
#include <QSerialPort> //串口类
#include <QSerialPortInfo> //串口属性类 { 获取系统可用的串口 }
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
public:void GetSystenSerilPort(); /*** 获取系统可用串口列表,并打印到UI界面 ***/
private:Ui::MainWindow *ui;QSerialPort *SerialPort; /** 串口类 **/public slots:void slot_pushButton_open();void slot_pushButton_send();void slot_SerialPort_readyRead();
};#endif // MAINWINDOW_H

。cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);/*** 申请串口类对象空间 ****/SerialPort = new QSerialPort(this);/*** 类构造时就获取系统可用串口列表 ***/GetSystenSerilPort();/*** 连接槽函数 ****/connect(ui->pushButton_open,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_open()));connect(SerialPort,SIGNAL(readyRead()),this,SLOT(slot_SerialPort_readyRead()));connect(ui->pushButton_send,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_send()));
}void MainWindow::slot_pushButton_send()
{QString text = ui->lineEdit_send->text();SerialPort->write(text.toUtf8());
}void MainWindow::slot_SerialPort_readyRead()
{QByteArray data = SerialPort->readAll();ui->textBrowser_read->append(data);
}#include <QMessageBox> /*** 标准对话框 ****/
void MainWindow::slot_pushButton_open()
{/******* 设置串口属性 ******/SerialPort->setPortName(ui->comboBox_portName->currentText()); //设置串口号SerialPort->setBaudRate(ui->comboBox_BaudRate->currentText().toInt()); //设置波特率if(ui->comboBox_DataBits->currentText() == "8"){SerialPort->setDataBits(QSerialPort::Data8); //设置数据位为8位}if(ui->comboBox_Parity->currentText() == "无校验"){SerialPort->setParity(QSerialPort::NoParity); //设置校验位为无校验}if(ui->comboBox_StopBits->currentText() == "1"){SerialPort->setStopBits(QSerialPort::OneStop); //设置停止位为1位}/***** 打开串口 ****/bool ok = false;if(ui->pushButton_open->text() == "打开串口"){ok = SerialPort->open(QIODevice::ReadWrite);if(ok == true) //串口打开成功{ui->groupBox_data->setEnabled(true);ui->pushButton_open->setText("关闭串口");}else{QMessageBox::warning(this,"警告","串口打开失败,请检查串口参数或串口已被占用");return ;}}else{SerialPort->close(); //关闭串口ui->pushButton_open->setText("打开串口");ui->groupBox_data->setEnabled(false);}
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::GetSystenSerilPort()
{QList<QSerialPortInfo> list_SerialPortInfo = QSerialPortInfo::availablePorts(); /*** 获取系统可用串口列表 ***/ui->comboBox_portName->clear(); /** 清空 串口号的下拉选项框 ***/for(QSerialPortInfo value : list_SerialPortInfo){ui->comboBox_portName->addItem(value.portName()); /*** 将串口名称添加到 UI 的串口号下拉选项框中 ***/}
}




3.音乐播放 (.mp3  .wav  .mp4都可播放)

1.头文件

#include <QMainWindow>
/***** 多媒体音视频播放类 ****/
#include <QMediaPlayer> /*** 多媒体播放类 ***/
#include <QMediaPlaylist>/*** 多媒体播放列表类 ***/
/***** 对话框相关类 *****/
#include <QFileDialog> /** 文件对话框 ***/

2.定义播放对象,和播放列表对象,并且实列化,把播放列表设置到播放器里面

    QMediaPlayer *MediaPlayer; /*** 多媒体播放类 ***/QMediaPlaylist *MediaPlaylist; /*** 多媒体播放列表类 ***//**** 申请多媒体播放类空间 ****/MediaPlayer = new QMediaPlayer(this);MediaPlaylist = new QMediaPlaylist(this);/**** 将播放列表设置到播放器中 ****/MediaPlayer->setPlaylist(MediaPlaylist);

3.设置时间的函数  与建立信号连接  (获取音乐时间的总长度,并且计算)

connect(MediaPlayer,SIGNAL(durationChanged(qint64)),this,SLOT(slot_MediaPlayer_durationChanged(qint64)));

/******** 时间转换函数 *******/
void time_cycle(QString &time,qint64 msec)
{/**** 计算总时间 ****/int seconds = msec / 1000; //秒钟int minute = seconds / 60; //分钟int hour = minute / 60 % 24; //小时if(hour == 0){time = QString::number(minute%60) + ":" + QString::number(seconds%60);}else{time = QString::number(hour%24) + ":" + QString::number(minute%60) + ":" + QString::number(seconds%60);}
}void Player::slot_MediaPlayer_durationChanged(qint64 dura)
{ui->horizontalSlider_progress->setMaximum(dura);time_cycle(time2,dura); /** 调用时间转换算法 函数**/ui->label_ratio->setText(time1 + "/" + time2);ui->label_name->setText(ui->listWidget->currentItem()->text());
}

4.视屏播放(mp4)

 /**** 将Paly播放器数据输出到UI ,需要解码器的支持 *****/MediaPlayer->setVideoOutput(ui->VideoWidget);

5.加入本地的音乐文件

void Player::slot_pushButton_add()
{QList<QUrl> file_Urls = QFileDialog::getOpenFileUrls(this,"添加音乐",QUrl("C:\\Users\\Administrator\\Music"),"音乐 (*.mp3 *.WAV) ;;视频 (*.mp4 *.avi) ;;所有文件 (*.*)");//添加音乐文件for(int i = 0; i < file_Urls.size() ; i++){ui->listWidget->addItem(file_Urls[i].fileName()); //将文件名添加到 ListWidget 的UI控件显示MediaPlaylist->addMedia(QMediaContent(file_Urls[i])); //将文件添加到里面 (播放列表)}
}

6.设置音乐播放速度的函数

void Player::slot_comboBox_rate(QString text)
{float rate = text.toFloat();//把QString 类型变为 float 类型MediaPlayer->setPlaybackRate(rate);//调节倍速
}

7.设置 正在播放的音乐 现在的时长  (包括建立连接)

connect(MediaPlayer,SIGNAL(positionChanged(qint64)),this,SLOT(slot_MediaPlayer_positionChanged(qint64)));//建立连接void Player::slot_MediaPlayer_positionChanged(qint64 posi)
{ui->horizontalSlider_progress->setValue(posi);time_cycle(time1,posi); /** 调用时间转换算法 函数**/ui->label_ratio->setText(time1 + "/" + time2);
}

8.音乐播放 静音模式

函数:MediaPlayer->setMuted();

9.设置音乐现在的播放进度 (包括信号连接)

horizontalSlider_progress,SIGNAL(valueChanged(int)),this,SLOT(slot_horizontalSlider_progress(int)));//信号连接void Player::slot_horizontalSlider_progress(int value)
{if(ui->horizontalSlider_progress->isSliderDown() == true){MediaPlayer->setPosition(value);}
}

10.设置声音播放的大小 (包括信号连接)

comboBox_rate,SIGNAL(currentTextChanged(QString)),this,SLOT(slot_comboBox_rate(QString)));void Player::slot_comboBox_rate(QString text)
{float rate = text.toFloat();MediaPlayer->setPlaybackRate(rate);
}

11.一些音乐播放的基本操作, (播放,暂停,。。。。。)

    connect(ui->pushButton_play,SIGNAL(clicked(bool)),MediaPlayer,SLOT(play()));//播放connect(ui->pushButton_pause,SIGNAL(clicked(bool)),MediaPlayer,SLOT(pause()));//暂停connect(ui->pushButton_stop,SIGNAL(clicked(bool)),MediaPlayer,SLOT(stop()));//停止connect(ui->pushButton_next,SIGNAL(clicked(bool)),MediaPlaylist,SLOT(next()));//下一首connect(ui->pushButton_previous,SIGNAL(clicked(bool)),MediaPlaylist,SLOT(previous()));//上一首


ui 设计界面

头文件

#ifndef PLAYER_H
#define PLAYER_H#include <QMainWindow>
/***** 多媒体音视频播放类 ****/
#include <QMediaPlayer> /*** 多媒体播放类 ***/
#include <QMediaPlaylist>/*** 多媒体播放列表类 ***/
/***** 对话框相关类 *****/
#include <QFileDialog> /** 文件对话框 ***/QT_BEGIN_NAMESPACE
namespace Ui { class Player; }
QT_END_NAMESPACEclass Player : public QMainWindow
{Q_OBJECTpublic:Player(QWidget *parent = nullptr);~Player();
public:void Media_Init();
private:Ui::Player *ui;QMediaPlayer *MediaPlayer; /*** 多媒体播放类 ***/QMediaPlaylist *MediaPlaylist; /*** 多媒体播放列表类 ***/QString time1; //当前时长QString time2; //总时长
public slots:void slot_pushButton_add();void slot_comboBox_rate(QString text);void slot_MediaPlaylist(int index);void slot_pushButton_delete();/***** 进度相关槽函数 *****/void slot_MediaPlayer_durationChanged(qint64 dura); //总时长发生改变对接该槽函数void slot_MediaPlayer_positionChanged(qint64 posi); //进度时间改变void slot_horizontalSlider_progress(int value); //进度滑块值改变对接该槽函数/***** 声音相关槽函数 *****/void slot_checkBox_volume(bool ok);
};
#endif // PLAYER_H

。cpp文件

#include "player.h"
#include "ui_player.h"Player::Player(QWidget *parent): QMainWindow(parent), ui(new Ui::Player)
{ui->setupUi(this);/**** 申请多媒体播放类空间 ****/MediaPlayer = new QMediaPlayer(this);MediaPlaylist = new QMediaPlaylist(this);/**** 将播放列表设置到播放器中 ****/MediaPlayer->setPlaylist(MediaPlaylist);/**** 将自带的音乐文件资源添加到播放器 ****///Media_Init();/**** 初始化音乐播放器 ******/MediaPlayer->setVolume(ui->horizontalSlider_volume->value()); //初始化音量为UI界面的音量/**** 将Paly播放器数据输出到UI ,需要解码器的支持 *****/MediaPlayer->setVideoOutput(ui->VideoWidget);/**** 信号槽操作播放列表 *****/connect(ui->pushButton_add,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_add()));connect(ui->pushButton_delete,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_delete()));/**** 信号槽操作播放器 *******/connect(ui->pushButton_play,SIGNAL(clicked(bool)),MediaPlayer,SLOT(play()));connect(ui->pushButton_pause,SIGNAL(clicked(bool)),MediaPlayer,SLOT(pause()));connect(ui->pushButton_stop,SIGNAL(clicked(bool)),MediaPlayer,SLOT(stop()));connect(ui->pushButton_next,SIGNAL(clicked(bool)),MediaPlaylist,SLOT(next()));connect(ui->pushButton_previous,SIGNAL(clicked(bool)),MediaPlaylist,SLOT(previous()));connect(ui->horizontalSlider_volume,SIGNAL(valueChanged(int)),MediaPlayer,SLOT(setVolume(int)));connect(ui->comboBox_rate,SIGNAL(currentTextChanged(QString)),this,SLOT(slot_comboBox_rate(QString)));connect(MediaPlaylist,SIGNAL(currentIndexChanged(int)),this,SLOT(slot_MediaPlaylist(int)));connect(ui->listWidget,SIGNAL(currentRowChanged(int)),MediaPlaylist,SLOT(setCurrentIndex(int)));/************ 进度相关信号槽功能 *************/connect(MediaPlayer,SIGNAL(durationChanged(qint64)),this,SLOT(slot_MediaPlayer_durationChanged(qint64)));connect(ui->horizontalSlider_progress,SIGNAL(valueChanged(int)),this,SLOT(slot_horizontalSlider_progress(int)));connect(MediaPlayer,SIGNAL(positionChanged(qint64)),this,SLOT(slot_MediaPlayer_positionChanged(qint64)));/************ 声音按钮信号槽 ******************/connect(ui->checkBox_volume,SIGNAL(clicked(bool)),this,SLOT(slot_checkBox_volume(bool)));
#if 0 //单文件MediaPlayer->setMedia(QMediaContent(QUrl("qrc:/音乐歌曲素材/噪 - 印度神曲Nijamena.mp3")));MediaPlayer->play(); /*** 播放 ***/
#endif
}void Player::slot_horizontalSlider_progress(int value)
{if(ui->horizontalSlider_progress->isSliderDown() == true){MediaPlayer->setPosition(value);}
}void Player::slot_checkBox_volume(bool ok)
{MediaPlayer->setMuted(ok);if(ok == true){ui->checkBox_volume->setIcon(QIcon(":/音乐播放器图片素材/jingyin.png")); //静音}else{ui->checkBox_volume->setIcon(QIcon(":/音乐播放器图片素材/shengyin.png")); //开声音}
}/******** 时间转换函数 *******/
void time_cycle(QString &time,qint64 msec)
{/**** 计算总时间 ****/int seconds = msec / 1000; //秒钟int minute = seconds / 60; //分钟int hour = minute / 60 % 24; //小时if(hour == 0){time = QString::number(minute%60) + ":" + QString::number(seconds%60);}else{time = QString::number(hour%24) + ":" + QString::number(minute%60) + ":" + QString::number(seconds%60);}
}void Player::slot_MediaPlayer_durationChanged(qint64 dura)
{ui->horizontalSlider_progress->setMaximum(dura);time_cycle(time2,dura); /** 调用时间转换算法 函数**/ui->label_ratio->setText(time1 + "/" + time2);ui->label_name->setText(ui->listWidget->currentItem()->text());
}void Player::slot_MediaPlayer_positionChanged(qint64 posi)
{ui->horizontalSlider_progress->setValue(posi);time_cycle(time1,posi); /** 调用时间转换算法 函数**/ui->label_ratio->setText(time1 + "/" + time2);
}void Player::slot_pushButton_delete()
{int row = ui->listWidget->currentRow();delete ui->listWidget->takeItem(row);MediaPlaylist->removeMedia(row);
}void Player::slot_MediaPlaylist(int index)
{int row = index;ui->listWidget->setCurrentRow(row);
}void Player::slot_comboBox_rate(QString text)
{float rate = text.toFloat();MediaPlayer->setPlaybackRate(rate);
}void Player::Media_Init()
{{QUrl url("qrc:/音乐歌曲素材/噪 - 印度神曲Nijamena.mp3");ui->listWidget->addItem(url.fileName()); //将文件名添加到 ListWidget 的UI控件显示MediaPlaylist->addMedia(QMediaContent(url)); //将文件添加到里面}{QUrl url("qrc:/音乐歌曲素材/果冻 - 成功没有退路.mp3");ui->listWidget->addItem(url.fileName()); //将文件名添加到 ListWidget 的UI控件显示MediaPlaylist->addMedia(QMediaContent(url)); //将文件添加到里面}{QUrl url("qrc:/音乐歌曲素材/蒋蒋 _ 朱贺 - 爱德华的小说.mp3");ui->listWidget->addItem(url.fileName()); //将文件名添加到 ListWidget 的UI控件显示MediaPlaylist->addMedia(QMediaContent(url)); //将文件添加到里面}
}void Player::slot_pushButton_add()
{QList<QUrl> file_Urls = QFileDialog::getOpenFileUrls(this,"添加音乐",QUrl("C:\\Users\\Administrator\\Music"),"音乐 (*.mp3 *.WAV) ;;视频 (*.mp4 *.avi) ;;所有文件 (*.*)");for(int i = 0; i < file_Urls.size() ; i++){ui->listWidget->addItem(file_Urls[i].fileName()); //将文件名添加到 ListWidget 的UI控件显示MediaPlaylist->addMedia(QMediaContent(file_Urls[i])); //将文件添加到里面}
}Player::~Player()
{delete ui;
}


QT 系统学习 day05 事件 HTTP网络请求, 音乐播放器,上位机串口通行相关推荐

  1. Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51448597 项目源码(打赏5积分请点这边):http://download.csdn ...

  2. Android开发本地及网络Mp3音乐播放器(十二)创建NetMusicListAdapter、SearchResult显示网络音乐列表

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51290181 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现NetM ...

  3. Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51298411 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现网络音乐 ...

  4. Android开发本地及网络Mp3音乐播放器(十)最近播放界面与数据保存更新

    实现功能: 实现MyLoveMusicActivity(音乐收藏界面) 实现MyRecordMusicActivity(最近播放界面) 实现MyMusicListFragment(本地音乐界面)Ite ...

  5. Android开发本地及网络Mp3音乐播放器(十四)网络音乐下载功能实现

    实现功能: 实现网络音乐搜索功能 实现网络音乐下载功能 下载好的音乐目前不在播放器内,可以通过文件浏览器查看. 后续将博文,将实现歌词和下载音乐扫描功能. 经过将近4天,才发布这一篇博客,明显更新博客 ...

  6. Android开发本地及网络Mp3音乐播放器(十五)网络音乐及歌词下载功能实现

    实现功能: 实现网络音乐歌词下载功能(下载音乐的同时,下载对应歌词) 下载好的歌词目前不在播放器内,可以通过文件浏览器查看. 后续将博文,将实现本地音乐歌词下载和已下载音乐扫描功能. 因为,没有自己的 ...

  7. Android开发本地及网络Mp3音乐播放器(十六)歌词显示及滚动事件实现、ViewPager使用

    转载请注明出处: http://blog.csdn.net/iwanghang/article/details/51386317 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 歌词显示及 ...

  8. Android开发本地及网络Mp3音乐播放器(十七)已存在歌曲歌词下载

    转载请注明出处: http://blog.csdn.net/iwanghang/article/details/51388896 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 已存在歌曲 ...

  9. Qt编写的项目作品11-带频谱的音乐播放器

    一.功能特点 可获取整个声音文件采样值数据 可实时获取当前播放位置的采样值数据 可设置采样的步长和数量 可开始播放/暂停播放/停止播放 多线程处理,超流畅 可设置当前播放位置 可设置和调节音量 支持任 ...

最新文章

  1. Find Minimumd in Rotated Sorted Array
  2. 【经验分享】非科班出身怎么转行计算机?
  3. boost::range_result_iterator相关的测试程序
  4. Codeforces Round #260 (Div. 1) C. Civilization(dfs+并查集)
  5. Array 复制到ArrayList中
  6. [Silverlight]奇技银巧系列-2
  7. shell脚本触发java程序支持传参补跑 +crontab定时器+每天生成日期文件_03
  8. 为什么计算机休眠风扇还转,Win7系统进入睡眠模式后电脑风扇还在转的解决方法...
  9. 信息学奥赛一本通 1024:保留3位小数的浮点数 | OpenJudge NOI 1.1 04
  10. onenote复制出来是图片_OneNote入门篇
  11. Android学习笔记之ListView与Item的焦点冲突处理
  12. 2005服务器文件夹网页设设置,设置VSS2005使支持通过Internet访问
  13. [转]邵雍其诗、其人、其事
  14. matlab 离散傅里叶变换_Matlab中的傅里叶变换
  15. 谷歌和 Zyxel 各修复一个已遭利用的 0day
  16. 自学python能找到工作吗-自学 Python,我是如何找到工作的?
  17. 华为获颁中国首个5G基站设备进网许可证:可支持中国规模部署;IBM推出新一代企业平台Z15;Testin最新AI产品发布……...
  18. Android逆向之某游单机SDK破解
  19. linux下QT工程调用opencv、libtorch,并用cmake编译,及其遇到的一些问题的解决方法
  20. 群晖docker搭建印象笔记_群晖docker安装蚂蚁笔记安装教程

热门文章

  1. 首届API安全管理论坛成功举办,聚焦API安全分享落地实践
  2. PE 394 【期望】【欧拉方程】
  3. 数据安全能力成熟度模型DSMM----4、数据存储安全
  4. 左程云老师算法课笔记(五)
  5. 大咖说·图书分享|数字化转型架构:方法论与云原生实践
  6. shiftdim 用法
  7. XSS、SSRF、CSRF、XXE 漏洞的区别
  8. HM 中cfg配置文件
  9. 域渗透—域内用户枚举与密码喷洒攻击(Password Spraying)
  10. poj1723 SOLDIERS(思维题-中位数/货仓选址问题)