QT开发中文网

qt6的basename只返回第一个点的部分

在 Qt6 中,QFileInfo::baseName() 方法确实只返回文件名中第一个点(.)之前的部分。如果你希望获得更复杂的逻辑,比如要获取不带所有后缀的基础名称,可以自定义实现。以下是一个示例代码,用于处理文件名,确保提取正确的基本名称:

#include <QCoreApplication>
#include <QFileInfo>
#include <QString>
#include <QStringList>
#include <QDebug>

QString getCustomBaseName(const QString &fileName) {
    QFileInfo fileInfo(fileName);
    
    // 获取完整的文件名和后缀
    QString fullFileName = fileInfo.fileName();
    QStringList parts = fullFileName.split('.');
    
    // 如果没有扩展名,则直接返回完整文件名
    if (parts.size() <= 1) {
        return fullFileName;
    }
    
    // 去掉最后一个部分作为后缀,返回其他部分组合起来的字符串
    parts.removeLast(); // 去掉最后一个后缀部分
    return parts.join('.'); // 使用 '.' 连接剩下的部分以形成基础名称
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString filePath = "example/file.name.txt"; // 示例文件路径

    QFileInfo fileInfo(filePath);
    
    QString fullFileName = fileInfo.fileName(); // 获取完整文件名(包含后缀)
    QString customBaseName = getCustomBaseName(fullFileName); // 自定义函数获取不带后缀的文件名
    
    qDebug() << "完整文件名:" << fullFileName;          // 输出: file.name.txt
    qDebug() << "自定义不带后缀的文件名:" << customBaseName;  // 输出: file.name

    return a.exec();
}

解释:

  • 我们使用 split('.') 方法将文件名按点拆分成多个部分。
  • 检查如果数组大小小于等于1,则说明没有扩展名,直接返回整个文件名。
  • 如果存在多个点,我们移除最后一个元素(即扩展名),然后通过 join('.') 将剩余部分重新组合为基础名称。

这种方法能有效处理有多个点的情况,以获取你所需的不带扩展名前面内容。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=13049

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?