1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
void FenPrincipale::ouvrirFichier()
{
const QString chemin = QFileDialog::getOpenFileName(this, "Ouvrir", QString(), "Headers (*.h)");
if (chemin.isNull()) { // Si l'utilisateur a annulé l'ouverture
return;
}
QFile fichier(chemin); // On passe directement le chemin retourné par getOpenFileName()
fichier.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream flux(&fichier); // C'est le QFile qu'il faut passer, pas le chemin
// C'est plutôt couteux à créer, évitons de le recréer inutilement à chaque itération
const QRegularExpression re("class[ \t]+(?<name>\\w+)([ \t]*:[ \t]*public[ \t]+(?<nameParent>\\w+))?");
const QRegularExpression header("#ifndef");
const QRegularExpression defaultconstructor("<name>()");
const QRegularExpression defaultdestructor("~<name>()");
QString ligne;
while (!flux.atEnd()) //flux.readLineInto(&ligne)
{
QRegularExpressionMatch match;
ligne = flux.readLine();
if(ligne.contains(re, &match))
{
const QString className = match.captured("name");
const QString classMere = match.captured("nameParent");
//if (!classMere.isNull()) {
// Présence d'héritage d'une classe mère
// je te laisse le mettre dans le bon champ
//}
this->update();
nom->setText(className);
classeMere->setText(classMere);
return; // Si tu n'as rien d'autre à récupérer, inutile de continuer le parcours
}
else if(ligne.contains(header, &match))
{
this->update();
protections->setChecked(1);
return; // Si tu n'as rien d'autre à récupérer, inutile de continuer le parcours
}
else if(ligne.contains(defaultconstructor, &match))
{
this->update();
genererConstructeur->setChecked(1);
return; // Si tu n'as rien d'autre à récupérer, inutile de continuer le parcours
}
else if(ligne.contains(defaultdestructor, &match))
{
this->update();
genererDestructeur->setChecked(1);
return; // Si tu n'as rien d'autre à récupérer, inutile de continuer le parcours
}
} |
Partager