“.mp3”元数据从 TagLib 到 QString、Qt、C++

".mp3" metadata from TagLib to QString, Qt, C++

我正在尝试使用格式为 "artist - album - song(year).mp3" 的 TagLib 重命名 .mp3 文件并将它们移动到新目录,到目前为止我正在使用

    TagLib::FileRef f(dirIt.filePath().toStdString().c_str());

    QString newName = f.tag()->artist().toCString() + " - " + f.tag()->album().toCString() + " - " + (QString) f.tag()->track() + " (" + (QString) f.tag()->year() + ")";
    QString newPath = NewDir.absolutePath() + QDir().separator() + newName + ".mp3";
    QFile::copy(oldDir, newPath);
    QFile::remove(dirIt.filePath().toStdString().c_str());

其中 "dirIt" 是一个 QDirIterator(我正在迭代歌曲所在的文件夹),"oldDir" 是一个 Qstring,其中包含我正在迭代的文件夹的绝对路径。

当我试图给 "newName" 想要的值时,我的问题来了,我得到

error: invalid operands of types 'const char*' and 'const char [4]' to binary 'operator+' QString newName = f.tag()->artist().toCString() + " - " + f.tag()->album().toCString() + " - " + (QString) f.tag()->track() + " (" + (QString) f.tag()->year() + ")";

我该如何解决这个问题?

使用格式字符串为新名称构建字符串:

QString newName("%1% - %2% - %3% (%4%)");
newName = newName.arg(f.tag()->artist().toCString()).arg(f.tag()->album().toCString()).arg(f.tag()->track()).arg(f.tag()->year());