为何没有从hashlist 取出两次数据数据?

baidu_28726667 2017-07-26 11:30:58
/*添加歌曲到列表*/
void MainWindow::on_Add_Button_clicked()
{
QString Music_File = QFileDialog::getOpenFileName(this,tr("添加文件"),
"C:\\Users\\ccmove\\Music","Mp3file(*.Mp3)");
if(!(Music_File.isEmpty()))
{
Music_List->insert(Music_File.split("/").last(),Music_File);
ui->File_listWidget->addItem(Music_File.split("/").last());
}
else
{

qDebug()<<Music_File.split("/").last();
qDebug()<<"打开文件失败";

}
}

/*播放暂停按钮,通过state()判断播放状态*/
void MainWindow::on_Play_Button_clicked()
{
if(ui->File_listWidget->currentIndex().isValid()== false)
{
qDebug()<<"没选中列表";
}
else if(Mplayer->state() == QMediaPlayer::StoppedState)
{
qDebug()<<"stat==StoppedState";
QString filePath = Music_List->take(ui->File_listWidget->currentItem()->text());
qDebug()<<"file_path=="+filePath;
Mplayer->setMedia(QUrl::fromLocalFile(filePath));
Mplayer->play();
times->start(1000);
QIcon icon;
icon.addFile(tr("resources/pause.png"));
ui->Play_Button->setIcon(icon);
}
else if(Mplayer->state() == QMediaPlayer::PausedState)
{

qDebug()<<"stat==PausedState";
Mplayer->pause();
QIcon icon;
icon.addFile(tr("resources/play.png"));
ui->Play_Button->setIcon(icon);
}
else if(Mplayer->state() == QMediaPlayer::PlayingState)
{
qDebug()<<"stat==PlayingState";
Mplayer->play();
QIcon icon;
icon.addFile(tr("resources/pause.png"));
ui->Play_Button->setIcon(icon);
}

}





[/code]

点击播放按钮,播放完歌曲后,再次点击播放按钮,发现没获取到list里面的路径?
ui 构造函数里面有
Music_List = new QHash<QString,QString>;
头文件里面也有这个定义
private:
QHash<QString,QString>* Music_List;
...全文
194 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 baidu_28726667 的回复:
[quote=引用 1 楼 qqwangfan 的回复:] 你要先往哈希表里面添加数据后才取得出数据吧?
帖子里面有段代码是 Music_List->insert(Music_File.split("/").last(),Music_File); 而且我第一次能读取出来啊,第二次却是空的[/quote] 我也看到有段代码是这个,但是你得调on_Add_Button_clicked这个函数才会往里添加。你那边是添加了几项,但是只能取出一项,后面再取就是空的,是这样的问题吗?
baidu_28726667 2017-07-26
  • 打赏
  • 举报
回复
引用 1 楼 qqwangfan 的回复:
你要先往哈希表里面添加数据后才取得出数据吧?
帖子里面有段代码是 Music_List->insert(Music_File.split("/").last(),Music_File); 而且我第一次能读取出来啊,第二次却是空的
  • 打赏
  • 举报
回复
你要先往哈希表里面添加数据后才取得出数据吧?
 本次课程会带着大家学习Hash算法,从源码的角度去学习算法,更加容易理解的方式去学习,能够更高效的吸收学到的内容,也能培养出能够独自看源码,分析源码的能力。Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。  哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。  通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名。也称为“消息摘要”。  简单解释:哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧