void musicplayer::slotPositionChanged(qint64 position){ //sec变量存储的是分钟数,mia变量存储的是剩余的秒数 int sec = position/60000;//毫秒/60000=分钟,自动向下取整 int mia = position%60000/1000;//剩余毫秒数除以1000得到剩余的秒数。。。 //canonicalUrl() 方法返回该媒体文件的 URL 地址,fileName() 方法返回该 URL 地址对应的文件名部分 ui->label->setText( playList->currentMedia().canonicalUrl().fileName()); //ss是一个QString对象,表示歌词文件的存放路径;split(".").front()将文件名按照“.”分割后取第一个部分(不包含扩展名的文件名) QFile file( ss +playList->currentMedia().canonicalUrl().fileName().split(".").front() + ".lrc"); //读取歌词文件并且根据当前播放进度来显示歌词 if (file.open(QIODevice::ReadOnly|QIODevice::Text)) { //QTextStream类来读取文件内容 QTextStream stream(&file); QString line; while ( !stream.atEnd()) { line = stream.readLine(); //line.mid()函数来提取出歌词中的时间信息,并且与当前播放进度进行比较 if(line.mid(1,2).toInt()==(position/60000)&&(line.mid(4,2)).toInt()==(position%60000/1000)) //line.mid(1,2) 表示从 line 字符串的第二个字符开始,截取两个字符,即取出时间戳中的分钟部分。 { lrclabel->setText(line.split("]").last()); //通过 lrclabel 控件显示该行歌词(line.split("]") //last() 表示将 line 字符串以 "]" 为分隔符拆分成多个子字符串,然后取最后一个子字符串作为歌词内容 } file.close(); } }else{ lrclabel->setText("未找到相应歌词!"); } //00:00 if(mia<10&&mia>-0) { ui->StartTime->setText("0"+QString::number(sec)+":"+"0"+QString::number(mia)); } else ui->StartTime->setText("0"+QString::number(sec)+":"+QString::number(mia)); }
时间: 2023-06-15 09:06:12 浏览: 58
这段代码是一个槽函数,用于响应音乐播放器的播放进度变化信号。在函数中,先计算出当前播放进度所对应的分钟数和剩余的秒数,然后通过 QLabel 控件显示当前播放的歌曲文件名和相应的歌词。具体实现是通过读取歌词文件,并且根据时间戳来匹配当前播放进度所对应的歌词,然后通过另一个 QLabel 控件来显示该行歌词。最后,还根据分钟数和剩余秒数来更新显示播放时间的 QLabel 控件。
相关问题
void musicplayer::slotDurationChanged(qint64 duration){ //mm:ss,second 存储了毫秒数对应的分钟数;miao 存储了毫秒数对应的秒数 int second = duration/60000;//duration 表示毫秒数 int miao = duration%60000/1000; if(miao<10&&miao>-0) { ui->AllTime->setText("0"+QString::number(second)+":"+"0"+QString::number(miao)); } else ui->AllTime->setText("0"+QString::number(second)+":"+QString::number(miao)); }
这段代码是一个槽函数,用于处理音乐播放器的总时间改变事件。函数的参数 duration 表示毫秒数对应的总时间,通过对 duration 进行计算可以得到分钟数和秒数。函数中的 if 语句用于判断当前的秒数是否小于 10,如果是则在秒数前面添加一个 0,以保证时间格式的正确性。最后将计算得到的分钟数和秒数更新到 UI 界面上的 AllTime QLabel 中。
class QFile; class QTcpServer; class QTcpSocket; namespace Ui { class Server; } class Server : public QDialog { Q_OBJECT public: explicit Server(QWidget *parent = 0); ~Server(); void initSrv(); //初始化服务器 void refused(); //关闭服务器 protected: void closeEvent(QCloseEvent *); private: Ui::Server *ui; qint16 tPort; QTcpServer *tSrv; QString fileName; QString theFileName; QFile *locFile; //待发送的文件 qint64 totalBytes; //总共需发送的字节数 qint64 bytesWritten; //已发送字节数 qint64 bytesTobeWrite; //特发送字节数 qint64 payloadSize; //被初始化为一个常量 QByteArray outBlock; //缓存一个发送的数据 QTcpSocket *clntConn; //客户端连接的套接字 QTime time; private slots: void sndMsg(); //发送数据 void updClntProgress(qint64 numBytes); //更新进度条 void on_sOpenBtn_clicked(); void on_sSendBtn_clicked(); void on_sCloseBtn_clicked(); signals: void sndFileName(QString fileName); };
这段代码是使用 C++ 和 Qt 框架编写的一个服务器程序。它可以监听 TCP 连接请求并处理客户端发来的消息。以下是这段代码的主要功能和变量:
- initSrv():初始化服务器并启动监听
- refused():关闭服务器
- closeEvent(QCloseEvent *):处理窗口关闭事件
- tPort:服务器监听的端口号
- tSrv:QTcpServer 类型的指针,表示服务器对象
- fileName:待发送的文件名
- theFileName:接收到的文件名
- locFile:QFile 类型的指针,表示待发送的文件
- totalBytes:待发送的总字节数
- bytesWritten:已经发送的字节数
- bytesTobeWrite:还需要发送的字节数
- payloadSize:数据包的大小,被初始化为一个常量
- outBlock:缓存发送数据的 QByteArray 对象
- clntConn:客户端连接的 QTcpSocket 对象
- time:当前时间的 QTime 对象
此外,这段代码还定义了一些私有的槽函数和信号,用于处理一些事件,如发送数据、更新进度条等。sndMsg() 槽函数用于发送数据,updClntProgress(qint64) 槽函数用于更新进度条,on_sOpenBtn_clicked()、on_sSendBtn_clicked()、on_sCloseBtn_clicked() 槽函数分别用于处理打开文件、发送文件和关闭连接的事件。sndFileName(QString) 信号用于发送文件名给客户端。