web-dev-qa-db-fra.com

Supprimer l'étiquette d'un fichier de fichier dans Qt

J'utilise Qt pour obtenir un nom de fichier de l'utilisateur:

QString fileName = QFileDialog::getOpenFileName(this,tr("Select an image file"),"d:\\",tr("Image files(*.tiff *.tif )"));

Cela fonctionne, mais j'ai besoin du nom de fichier sans son extension , est-ce possible dans Qt ?? quand j'essaie:

QString f = QFileInfo(fileName).fileName();

f est comme "filename.tif" , mais je veux que ce soit "filename" .

15
Engine

Vous pouvez splitfileName avec "." comme séparateur comme ceci:

QString croped_fileName=fileName.split(".",QString::SkipEmptyParts).at(0);

ou utilisez la fonction section de QString pour prendre la première partie avant "." comme ça:

QString croped_fileName=fileName.section(".",0,0);
1
Shf

QFileInfo a deux fonctions pour cela:

QString QFileInfo::completeBaseName () const

Retourne le nom du fichier avec l'extension la plus courte supprimée (file.tar.gz -> file.tar)

QString QFileInfo::baseName () const

Retourne le nom du fichier avec l'extension la plus longue supprimée (file.tar.gz -> file)

79
Angew

Pour faire face aux noms de fichiers contenant plusieurs points, recherchez le dernier et prenez la sous-chaîne jusqu'à celle-ci.

int lastPoint = fileName.lastIndexOf(".");
QString fileNameNoExt = fileName.left(lastPoint);

Bien sûr, cela peut (et devrait) être écrit comme une fonction d'assistance pour la réutilisation:

inline QString withoutExtension(const QString & fileName) {
    return fileName.left(fileName.lastIndexOf("."));
}
7
leemes

Vous pouvez utiliser QString::split et utiliser le . comme endroit où le scinder.

QStringList list1 = str.split(".");

Cela retournera une QStringList avec {"filename", "extenstion"}. Maintenant, vous pouvez obtenir votre nom de fichier sans l'extension.

2
Tony The Lion