Bonsoir,
Comment recuperer le chemin d'un type de fichier de façon aleatoire dans un repertoire a chaque ouverture de son application?
Cordialement
Bonsoir,
Comment recuperer le chemin d'un type de fichier de façon aleatoire dans un repertoire a chaque ouverture de son application?
Cordialement
Bonsoir,
Si tu ne connais pas à l'avance le nombre de fichiers dans le répertoire, la seule solution est d'en faire la liste (avec QDir::entryList, entryInfoList ou QDirIterator) et d'en prendre un aléatoirement dans cette liste.
Merci,
j'en ai fait la liste et j'en ai même extrait le nombre, mais comment justement tu en prend un aleatoirement ?
Cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 QString MyAppDirPath = QCoreApplication::applicationDirPath(); // recupere le chemein de l'application QStringList listFilter; // on filtre les fichier avec l'extension .film listFilter << "*.film"; QDirIterator dirIterator((MyAppDirPath + "/Xavier"), listFilter ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); // On déclare un QDirIterator dans lequel on indique que l'on souhaite parcourir un répertoire et ses sous-répertoires. // De plus, on spécifie le filtre qui nous permettra de récupérer uniquement les fichiers du type souhaité. QStringList fileList; // Variable qui contiendra tous les fichiers correspondant à notre recherche int NombreFilms; // variable pour mettre le nombre de fichiers trouvés while(dirIterator.hasNext()) // Tant qu'on n'est pas arrivé à la fin de l'arborescence... { dirIterator.next(); fileList << dirIterator.fileName(); } fileList.replaceInStrings(".film",""); // on supprime l'extension .film NombreFilms = fileList.count(); // on compte le nombre de fichiers extrait QString essai = fileList.join("\n"); // on retoune a la ligne a chaque nom de fichier QString NumTexte = QString :: number(NombreFilms); // on converti le nombre en chaine de caracteres
je pense qu'en utilisant un qrand() modulo la taille de ta liste tu pourrai avoir un indice aléatoire et donc tu n'as plus qu'a aller chercher le fichier de ta liste à cet indice![]()
Bonsoir,
Generer un chiffre aleatoire, c'est pas cela le probleme;
C'est d'utiliser ce chiffre pour extraire le nom du fichier qui correspond;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int nbAlea; nbAlea = qrand() % (NombreFilms + 1);
ne fonctionne pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part QString testItem = fileList.count(nbAlea)->text();
Cordialement
QStringList hérite de QList, donc tu peux utiliser l'opérateur [] ou la fonction at:
Code : Sélectionner tout - Visualiser dans une fenêtre à part QString testItem = fileList.at(nbAlea);
Bonjour,
Merci Beaucoup
Le resultat :
je suis ouvert a toutes critiques
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include "xavtest1.h" // pour utilisé le contenu de ce fichier dans XavTest1.cpp #include <QtGui> // pour inclure tout les composants // (ralenti l'application, on peut declarer les composants utilisés un par un) XavTest1::XavTest1(QWidget *parent) : QWidget(parent) { QGridLayout *grid = new QGridLayout; // widget grille pour disposer les differents composants QHBoxLayout *layout = new QHBoxLayout; // l'interieur de la fenetre layout->addWidget(tab); // on installe le classeur a l'interieur de la fenetre QWidget *onglet0 = new QWidget(); // ce classeur a un onglet 0 onglet0->setLayout(grid); // dans l'onglet 0 on installe le composant grille pour placer les differents widgets tab->addTab(onglet0, tr("&FicheFilms")); // on donne un titre a l'onglet tr() pour traduction futur QString MyAppDirPath = QCoreApplication::applicationDirPath(); // recupere le chemein de l'application QStringList listFilter; // on filtre les fichier avec l'extension .film listFilter << "*.film"; QDirIterator dirIterator((MyAppDirPath + "/Xavier"), listFilter ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); // On déclare un QDirIterator dans lequel on indique que l'on souhaite parcourir un répertoire et ses sous-répertoires. // De plus, on spécifie le filtre qui nous permettra de récupérer uniquement les fichiers du type souhaité. QStringList fileList; // Variable qui contiendra tous les fichiers correspondant à notre recherche int NombreFilms; // variable pour mettre le nombre de fichiers trouvés while(dirIterator.hasNext()) // Tant qu'on n'est pas arrivé à la fin de l'arborescence... { //fileList << dirIterator.next(); // ...on va au prochain fichier correspondant à notre filtre dirIterator.next(); // suivant fileList << dirIterator.fileName();// Nom du fichier dans fileList } fileList.replaceInStrings(".film",""); // on supprime l'extension .film NombreFilms = fileList.count(); // nombre de fichiers QString essai = fileList.join("\n"); // on retoune a la ligne a chaque nom de fichier QPlainTextEdit *Essai = new QPlainTextEdit(essai); // on l'affiche dans un QPlainTextEdit grid->addWidget(Essai, 0, 0, 1, 2); // que l'on place dans la grille ... QString NumTexte = QString :: number(NombreFilms); // on converti le nombre en chaine de caracteres QPlainTextEdit *Essai2 = new QPlainTextEdit(NumTexte); // on l'affiche dans un QPlainTextEdit grid->addWidget(Essai2, 0, 2, 1, 2); // que l'on place dans la grille ... int nbAlea; // declaration de la variable nbAlea qsrand( QDateTime::currentDateTime().toTime_t() ); // initialisation de la fonction aleatoire nbAlea = qrand() % (NombreFilms + 1); // nbAlea de 1 a NombreFilms QString testItem = fileList.at(nbAlea); // testItem = nom du fichier du numero de ligne aleatoire selectionné QPlainTextEdit *Essai3 = new QPlainTextEdit(testItem); // on l'affiche dans un QPlainTextEdit grid->addWidget(Essai3, 0, 4, 1, 2); // que l'on place dans la grille ... setLayout(layout); // pour afficher tout ci-dessus }
Cordialement
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager