Regarde la doc de QStringList et plus precisement cette methode ici.
Regarde la doc de QStringList et plus precisement cette methode ici.
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
J'ai un problème avec le at() maitenant
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 // On définit le dossier où le vont se trouver QString CurrentDir ="c:\\A COPIER"; // On se place dans ce dossier QDir::setCurrent(CurrentDir); // On paramètre le filtre, ici tous les fichiers QStringList listFilter; listFilter << "*.*"; // 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é. QDirIterator dirIterator(CurrentDir, listFilter ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); // Variable qui contiendra tous les fichiers correspondants à notre recherche QStringList fileList; // Variable qui va contenir le chemin du fichier qui va être copié QFile ftemp; // Tant qu'on n'est pas arrivé à la fin de l'arborescence... while(dirIterator.hasNext()) { fileList << dirIterator.next(); // On récupère tous les noms fichiers du dossier en cours int TfileList=fileList.size(); // On récupère la taille de la liste int i; for ( i=0 ; i<TfileList ; i++ ) // On boucle en conséquence pour effectuer la copie { ftemp = QFile(fileList.at(i)); // on récupère le chemin du fichier qui va être copié via la fileList ftemp.copy("c:\\COPIE"); // on copie ce fichier } }
il me dit que c'est privé, comme si j'essayais de modifier la méthode o0
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Il te dit que tu ne peut pas utiliser le constructeur par recopie.
remplace
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part ftemp = QFile(fileList.at(i));
Je me demande si l'utilisation de la version static de copy ne serait plus adapté et aulieu de parcourire des QFile, parcourire des QFileInfo.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ftemp = fileList.at(i);
Je ne sait pas trop.
http://qt.developpez.com/doc/4.5/qfileinfo/
http://qt.developpez.com/doc/4.5/qfile/#copy-2
J'avais eu besoin de la même fonction et voilà le résultat (surement à améliorer) :
Merci pour tes source mais je ne connais pas les fonctions et je ne veux pas repomper parce que sinon j'apprends rien et ce n'est pas le but, sinon entre qfile et qfileinfo je ne sais pas. Je vois pas trop la différence à part que dans l'autre y'a plus d'attributs. De toutes façon j'aurai besoin de qfileinfo pour récupérer les dâtes et les heures de création ainsi que la taille pour les options de copie.
C'est étrange l'erreur. Je vois pas quel est son problème avec le fait que ce soit plublic ou privé là, je modifie rien pourtant.
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Un QFile est un flux d'entrée/sortie. C'est classe permet donc d'écrire et de lire le contenu d'un fichier.
QFileInfo permet d'accéder aux informations d'un "fichier". Dans ce cas, un fichier est plus vu sous un contexte unix : un "fichier" peut être un fichier au sens windows, un dossier, un raccourci...
Ainsi pour la manipulation des fichiers, QFile et pour avoir des infos QFileInfo...
De plus, pour que nous puissions t'aider plus efficacement, les fichiers complets seraient bien utile...
Salut,
J'ai lu un peu en diagonale, mais à tout hasard... QFile::copy accepte des QString en paramètres, donc tu n'as même pas à utiliser des QFileInfo. Tu passes le fichier source et le fichier destination et c'est bon ; vu qu'il est question d'une QStringList, j'ai l'impression que c'est ce que tu cherches.
Et bien sur le réseau j'ai l'arborescense suivante :
PABX
+ ALCATEL
+ D2A
+ EASY
+ VOCALD6
+ MATRAPARALLELE
+ SAUVMATRA
+ XS
+ XS2
Sur le PC j'ai la même arborescence. Donc en fait ça sauvegarde du PC vers le réseau, dossier à dossier.
Et pour l'erreur avec le QFile, je n'arrive pas à résoudre.
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
A mon avis comme conseillé par IrmatDen je pense qu'il vaut mieux que tu utilises la methode static copy de QFile. Elle prends le chemin de la source ( Ex : Ta QStringList.at(i) ) et le chemin de la destination ca c'est a toi de voir ou tu veux copier. Sinon pour voir du code tu as la FAQ ou il y a un exemple avec cette methode static.
Bon courage.
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
Bah oui et non, si je le fais pas comme ça c'est que j'y arrive pas non plus, j'ai déjà demandé comment faire et on m'a aiguillé sur cette méthode de copy et maintenant on me dit ça marche pas bah retourne à l'autre.
Je tourne en rond, comment je fais pour injecter le chemin dans la commande QFile::copy ? Y'a pas d'équivalent sprintf pour QT ?
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 QString CurrentDir ="c:\\A COPIER"; // On se place dans ce dossier QDir::setCurrent(CurrentDir); // On paramètre le filtre, ici tous les fichiers QStringList listFilter; listFilter << "*.*"; // 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é. QDirIterator dirIterator(CurrentDir, listFilter ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); // Variable qui contiendra tous les fichiers correspondants à notre recherche QStringList fileList; // Variable qui va contenir le chemin du fichier qui va être copié QFile path; // Tant qu'on n'est pas arrivé à la fin de l'arborescence... while(dirIterator.hasNext()) { fileList << dirIterator.next(); // On récupère tous les noms fichiers du dossier en cours int TfileList=fileList.size(); // On récupère la taille de la liste int i; for ( i=0 ; i<TfileList ; i++ ) // On boucle en conséquence pour effectuer la copie { path = QFile(fileList.at(i)); // on récupère le chemin du fichier qui va être copié via la fileList QFile::copy (???, c:\\COPIE); // on copie ce fichier } }
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
ton while devrais plutôt ressembler à :
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 QDirIterator dirIterator("ton path" ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories ); while(dirIterator.hasNext()) { QString path = dirIterator.path(); // on récupère le chemin du fichier qui va être copié via la fileList QSting pathOut ( "c:\\COPIE"); pathOut += ...; QFile::copy (path ,pathOut ); // on copie ce fichier //on passe à l'entré suivante dirIterator.next(); }
Y'a pas d'erreur de compilation mais sa copie nada o0.
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 QString CurrentDir ="c:\\A COPIER"; // On se place dans ce dossier QDir::setCurrent(CurrentDir); // 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é. QDirIterator dirIterator(CurrentDir, listFilter ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); // Tant qu'on n'est pas arrivé à la fin de l'arborescence... while(dirIterator.hasNext()) { QString path = dirIterator.path(); // on récupère le chemin du fichier qui va être copié via la fileList QString pathOut("c:\\COPIE"); QFile::copy (path ,pathOut ); // on copie ce fichier //on passe à l'entré suivante dirIterator.next(); } // SIGNAUX QObject::connect(bouton0, SIGNAL(clicked()) , qApp, SLOT( aboutQt() ) ); QObject::connect(bouton1, SIGNAL(clicked()) , qApp, SLOT( quit() ) ); }
QFile::copy (path ,pathOut ); ne marche pas. Il va pas deviner que le tout est un QString ? si ?
QFile::copy (command); avec command un Qstring qui contient "c:\\A COPIER\a.txt", "c:\\COPIE" par exemple. En fait faudrait au pire concaténer ? je ne sais pas. Doit bien y'avoir un moyen bordel, des logiciels de copies codés en c y'en a plein?
Sincérement, je suis perdu, y'en a partout, c'est jamais pareil et ça marche pas. Je sais pas comment je me demerde.
A savoir que c:\A COPIER contient un dossier TEST contenant 3 dll.
Merci
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Il faut bien concaténer le nom du fichier et son chemin relatif au chemin d'origine avant d'en faire la copie... Cette fonction ne copie pas un fichier "foo.ext" dans le répertoire "bar", mais bien "foo.ext" dans le fichier "bar/foo.ext". Et si le fichier existe déjà, la copie n'est pas effectuée comme le dit la doc (puisque ton répertoire destination existe déjà probablement, ça retourne false d'entrée de jeu ; dans le cas contraire, tu obtiendras un fichier COPIE à la racine qui contient le premier fichier que tu as voulu copier).
C'est pour ça que je demande dans mes posts s'il y a une fonction pour concaténer 2 QString.
Je rècupère dans un .ini les chemins des dossiers dont les fichiers doivent êtres sauvegardés.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 #include <QApplication> #include <QDirIterator> #include <QWidget> #include <QPushButton> #include <QLCDNumber> #include <QSlider> #include <QLabel> #include <QProgressBar> #include <QMessageBox> #include <windows.h> #include <QFile> #include <QString> #include <QFileDialog> #include <QObject> #include <QStringList> #include "fenetre.h" #define WIDTH 75 #define SPACE 20 MaFenetre::MaFenetre() : QWidget() { // DIMENSION DE LA FENETRE int ResX = (int)(0.33*GetSystemMetrics(SM_CXSCREEN)); int ResY = (int)(0.16*GetSystemMetrics(SM_CYSCREEN)); // ON FIXE LES DIMENSIONS POUR QUE LA FENETRE NE SOIT PLUS REDIMENSIONEE setFixedSize(ResX, ResY); // VARIABLE POUR LES CHEMINS DES DOSSIERS SUR LE PC DU TECHNICIEN char S_XS [999]; char S_XS2 [999]; char S_D2A [999]; char S_EASY [999]; char S_ALCATEL [999]; char S_VOCALD6 [999]; char S_SAUVMATRA [999]; char S_MATRAPARALLELE[999]; // VARIABLE POUR LES CHEMINS DES DOSSIERS SUR LE RESEAU char D_XS [999]; char D_XS2 [999]; char D_D2A [999]; char D_EASY [999]; char D_ALCATEL [999]; char D_VOCALD6 [999]; char D_SAUVMATRA [999]; char D_MATRAPARALLELE[999]; // VARIABLE CONTENANT LA COMMANDE DE COPIE char COPY_XS [999]; char COPY_XS2 [999]; char COPY_D2A [999]; char COPY_EASY [999]; char COPY_ALCATEL [999]; char COPY_VOCALD6 [999]; char COPY_SAUVMATRA [999]; char COPY_MATRAPARALLELE[999]; // RECUPERATION DES CHEMIN SUR LE PC DU TECHNICIEN GetPrivateProfileStringA("section", "S_XS" , "", S_XS , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_XS2" , "", S_XS2 , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_D2A" , "", S_D2A , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_EASY" , "", S_EASY , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_ALCATEL" , "", S_ALCATEL , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_VOCALD6" , "", S_VOCALD6 , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_SAUVMATRA" , "", S_SAUVMATRA , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_MATRAPARALLELE", "", S_MATRAPARALLELE, 999, ".//setup.ini"); // RECUPERATION DES CHEMIN SUR LE RESEAU GetPrivateProfileStringA("section", "D_XS" , "", D_XS , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_XS2" , "", D_XS2 , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_D2A" , "", D_D2A , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_EASY" , "", D_EASY , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_ALCATEL" , "", D_ALCATEL , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_VOCALD6" , "", D_VOCALD6 , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_SAUVMATRA" , "", D_SAUVMATRA , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_MATRAPARALLELE", "", D_MATRAPARALLELE, 999, ".//setup.ini"); // TITRE QLabel *titre = new QLabel("<SMALL><strong>SAUVEGARDE AUTOMATIQUES DES DONNEÉS</strong></SMALL>", this); titre->move( (ResX - titre->minimumSizeHint().width())/2,0.1*ResY ); // AFFICHAGE DES BOUTONS bouton0 = new QPushButton("ARRETER", this); bouton1 = new QPushButton("QUITTER", this); // POSITION DES BOUTONS DANS LA FENETRE bouton0->setGeometry ( (int)((ResX-(2*WIDTH+SPACE))/2) , (int)(0.8*ResY), WIDTH, SPACE ); bouton1->setGeometry ( (int)((ResX-(2*WIDTH+SPACE))/2+WIDTH+SPACE), (int)(0.8*ResY), WIDTH, SPACE ); // BARRE DE PROGRESSION QProgressBar *ProgressBar= new QProgressBar(this); ProgressBar->setGeometry ( 0.1*ResX, 50, 0.8*ResX, 0.1*ResY ); ProgressBar->setRange( 0, 100 ); ProgressBar->setValue( 0 ); QFile file("C:/MinGW/OTHER/projets C/QTPROJECT/debug/PABX/ALCATEL/file.txt"); file.copy("C:/MinGW/OTHER/projets C/QTPROJECT/debug/SAVE/ALCATEL/file.txt"); ProgressBar->setValue( 100 ); // SIGNAUX QObject::connect(bouton0, SIGNAL(clicked()) , qApp, SLOT( aboutQt() ) ); QObject::connect(bouton1, SIGNAL(clicked()) , qApp, SLOT( quit() ) ); }
S_XXXX pour le chemin source
D_XXXX pour la destination
Donc il faut que je copie tout les fichiers de S_XXXX vers D_XXXX.
Il va falloir que je récupère le nom de chaque fichier contenu dans S_XXXX.
Ensuite je pourrais le concaténer avec le chemin du dossier qui est donc S_XXXX si il existe une fonction pour concaténer des QString ou alors je suis ouvert à toutes autres propositions.
Etant donné que je récupère les les chemins des dossiers grâce au .ini, mes données sont stockés dans des char, y'a t-il une fonction pour convertir char->QString. Je sais que l'inverse est possible mais ce ne m'aide pas ici.
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Merci, j'ai essayé ça mais cela ne semble pas marcher.
Je dois mal faire la concaténation ?
La concaténation se passe bien à priori puisqu'à l'affichage le QLabel me retroune : "C:/MinGW/OTHER/projets C/QTPROJECT/debug/PABX/XS/*.*".
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
44
45 // On convertit le dossier source de type char vers QString // Opération de convertion à trouver, on met le résultat dans la variable "source" QString source = "C:/MinGW/OTHER/projets C/QTPROJECT/debug/PABX/XS"; // On convertit le dossier source de type char vers QString // Opération de convertion à trouver, on met le résultat dans la variable "destination" QString destination = "C:/MinGW/OTHER/projets C/QTPROJECT/debug/SAVE/XS"; // On se place dans le dossier dont on veut que les fichiers soient copiés QDir::setCurrent(source); // On choisit de copier tous les types de fichiers QStringList filtre; filtre << "*.*"; // On récupère le nombre de fichiers contenu dans le filtre int nombre_de_fichiers=filtre.size(); // Variable qui va stocker le nom du fichier en cours QString nom_du_fichier; // On fait une boucle pour parcourir tous les fichiers contenus dans le dossier int i; for ( i=0 ; i < nombre_de_fichiers ; i++ ) { // On récupère les noms de fichiers dans la liste nom_du_fichier = filtre.at(i); // On concatène le chemin source avec le nom du fichier source+=nom_du_fichier; // On concatène le chemin destination avec le nom du fichier destination+=nom_du_fichier; // On spécifie le chemin source du fichier à copier QFile file(source); // On spécifie le chemin destination du fichier à copier file.copy(destination); } ProgressBar->setValue( 100 ); // SIGNAUX QObject::connect(bouton0, SIGNAL(clicked()) , qApp, SLOT( aboutQt() ) ); QObject::connect(bouton1, SIGNAL(clicked()) , qApp, SLOT( quit() ) ); }
Il y a un problème avec le filtre ou alors je n'arrive pas à me placer dans le bon dossier et le filtre ne récupère rien du tout ?
Peut être bien qu'ici il manque quelque chose ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part QDir::setCurrent(source);
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 // On convertit le dossier source de type char vers QString // Opération de convertion à trouver, on met le résultat dans la variable "source" QString source = "C:/MinGW/OTHER/projets C/QTPROJECT/debug/PABX/XS/"; // On convertit le dossier source de type char vers QString // Opération de convertion à trouver, on met le résultat dans la variable "destination" QString destination = "C:/MinGW/OTHER/projets C/QTPROJECT/debug/SAVE/XS/"; // On se place dans le dossier dont on veut que les fichiers soient copiés QDir::setCurrent(source); // On choisit de copier tous les types de fichiers QStringList filtre; filtre << "*.*"; // On récupère le nombre de fichiers contenu dans le filtre int nombre_de_fichiers=filtre.size(); // Variable qui va stocker le nom du fichier en cours QString nom_du_fichier; // On fait une boucle pour parcourir tous les fichiers contenus dans le dossier int i; for ( i=0 ; i < nombre_de_fichiers ; i++ ) { // On récupère les noms de fichiers dans la liste nom_du_fichier = filtre.at(i); // On concatène le chemin source avec le nom du fichier source+=nom_du_fichier; // On concatène le chemin destination avec le nom du fichier destination+=nom_du_fichier; QLabel *test = new QLabel(" source : " + source, this); titre->move( (ResX - titre->minimumSizeHint().width())/2,0.2*ResY ); // On spécifie le chemin source du fichier à copier QFile file(source); // On spécifie le chemin destination du fichier à copier file.copy(destination);
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
J'ai rajouté ceci pour voir la taille du filtre et cela me retourne 1, donc il y a un problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 QString nombre=""; nombre=QString::number(nombre_de_fichiers); test->setText(nombre);
Je pense toujours que ça vient du fait que ça ne doit pas arriver à aller dans le répertoire cible mais je ne vois pas pourquoi. C'est montré comme ce la dans la FAQ.
EDIT :
quand je mets un nom de fichier existant dans le filtre il est correctement copié.
Et quand je copie, la fenêtre ne s'affiche même pas, à quoi bon faire une interface graphique si elle ne s'affiche qu'à la fin de la copie...
Y'a t-il quelque chose à faire pour y remédier?
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Le moyen, c'est le multi-threading... Mais dans un premier temps, il faut déjà faire fonctionner la copie.Et quand je copie, la fenêtre ne s'affiche même pas, à quoi bon faire une interface graphique si elle ne s'affiche qu'à la fin de la copie...
Y'a t-il quelque chose à faire pour y remédier?
Après relecture de la discussion, il me semble qu'avant de trouver le moyen technique, il faudrait réfléchir à l'algo qui permet de faire de la copie récursive.
De plus, pour vérifier la formation d'une chaine de caractère une méthode simple consiste à placer dans l'include :Ajouter dans le fichier .pro du projet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part #include <QDebug>Ensuite un coup de
Code : Sélectionner tout - Visualiser dans une fenêtre à part CONFIG += consolepermet de vérifier que les chaines sont bien construitent...
Code : Sélectionner tout - Visualiser dans une fenêtre à part qDebug() << chaine_a_lire;
Et bien en fait comme je l'ai mentionné plus haut, les fichiers sont correctement copiés à conditions de spécifier explicitement son nom ( ex : a.dll ). Dans ce cas si un tel fichier existe dans le chemin source, il sera copié dans le chemin destination.
Le problème vient du filtre et je ne comprends pas pourquoi.
J'ai affiché dans la fenêtre le nombre de fichiers contenu dans le filtre et il me retourne "1" et m'affiche *.* comme vous allez pouvoir le constater sur cet image. Sinon le chemin lui est correct.
J'ai rajouté ce que vous m'avez dit dans le .pro et les lignes correspondantes au debug mais la console ne s'affiche pas. Je mis la ligne de commande à plusieurs endroit dans le .pro, à un endroit ça ne marche pas et à un autre si donc je suppose que c'est mis au bon endroit ?
Je vous redonne mes 3 fichiers si vous souhaitez les compilez vous même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 ###################################################################### # Automatically generated by qmake (2.01a) mer. 6. mai 14:25:23 2009 ###################################################################### TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input HEADERS += fenetre.h SOURCES += fenetre.cpp main.cpp CONFIG += console
FENETRE.CPP
FENETRE.H
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174 #include <QApplication> #include <QApplication> #include <QDirIterator> #include <QWidget> #include <QPushButton> #include <QLCDNumber> #include <QSlider> #include <QLabel> #include <QProgressBar> #include <QMessageBox> #include <windows.h> #include <QFile> #include <QString> #include <QFileDialog> #include <QObject> #include <QStringList> #include <QDebug> #include "fenetre.h" #define WIDTH 75 #define SPACE 20 MaFenetre::MaFenetre() : QWidget() { // DIMENSION DE LA FENETRE int ResX = (int)(0.66*GetSystemMetrics(SM_CXSCREEN)); int ResY = (int)(0.32*GetSystemMetrics(SM_CYSCREEN)); // ON FIXE LES DIMENSIONS POUR QUE LA FENETRE NE SOIT PLUS REDIMENSIONEE setFixedSize(ResX, ResY); // VARIABLE POUR LES CHEMINS DES DOSSIERS SUR LE PC DU TECHNICIEN char S_XS [999]; char S_XS2 [999]; char S_D2A [999]; char S_EASY [999]; char S_ALCATEL [999]; char S_VOCALD6 [999]; char S_SAUVMATRA [999]; char S_MATRAPARALLELE[999]; // VARIABLE POUR LES CHEMINS DES DOSSIERS SUR LE RESEAU char D_XS [999]; char D_XS2 [999]; char D_D2A [999]; char D_EASY [999]; char D_ALCATEL [999]; char D_VOCALD6 [999]; char D_SAUVMATRA [999]; char D_MATRAPARALLELE[999]; // RECUPERATION DES CHEMIN SUR LE PC DU TECHNICIEN GetPrivateProfileStringA("section", "S_XS" , "", S_XS , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_XS2" , "", S_XS2 , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_D2A" , "", S_D2A , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_EASY" , "", S_EASY , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_ALCATEL" , "", S_ALCATEL , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_VOCALD6" , "", S_VOCALD6 , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_SAUVMATRA" , "", S_SAUVMATRA , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "S_MATRAPARALLELE", "", S_MATRAPARALLELE, 999, ".//setup.ini"); // RECUPERATION DES CHEMIN SUR LE RESEAU GetPrivateProfileStringA("section", "D_XS" , "", D_XS , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_XS2" , "", D_XS2 , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_D2A" , "", D_D2A , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_EASY" , "", D_EASY , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_ALCATEL" , "", D_ALCATEL , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_VOCALD6" , "", D_VOCALD6 , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_SAUVMATRA" , "", D_SAUVMATRA , 999, ".//setup.ini"); GetPrivateProfileStringA("section", "D_MATRAPARALLELE", "", D_MATRAPARALLELE, 999, ".//setup.ini"); // TITRE QLabel *titre = new QLabel("<SMALL><strong>SAUVEGARDE AUTOMATIQUES DES DONNEÉS</strong></SMALL>", this); titre->move( (ResX - titre->minimumSizeHint().width())/2,0.1*ResY ); // AFFICHAGE DES BOUTONS bouton0 = new QPushButton("ARRETER", this); bouton1 = new QPushButton("QUITTER", this); // POSITION DES BOUTONS DANS LA FENETRE bouton0->setGeometry ( (int)((ResX-(2*WIDTH+SPACE))/2) , (int)(0.8*ResY), WIDTH, SPACE ); bouton1->setGeometry ( (int)((ResX-(2*WIDTH+SPACE))/2+WIDTH+SPACE), (int)(0.8*ResY), WIDTH, SPACE ); // BARRE DE PROGRESSION QProgressBar *ProgressBar= new QProgressBar(this); ProgressBar->setGeometry ( 0.1*ResX, 50, 0.8*ResX, 0.1*ResY ); ProgressBar->setRange( 0, 100 ); ProgressBar->setValue( 0 ); // On convertit le dossier source de type char vers QString QString source=QString(S_XS); // On convertit le dossier source de type char vers QString QString destination =QString(D_XS); // On se place dans le dossier dont on veut que les fichiers soient copiés QDir::setCurrent(source); // On choisit de copier tous les types de fichiers QStringList filtre; filtre << "*.*"; // On récupère le nombre de fichiers contenu dans le filtre int nombre_de_fichiers=filtre.size(); // Variable qui va stocker le nom du fichier en cours QString nom_du_fichier; // On fait une boucle pour parcourir tous les fichiers contenus dans le dossier int i; for ( i=0 ; i < nombre_de_fichiers ; i++ ) { // On récupère les noms de fichiers dans la liste nom_du_fichier = filtre.at(i); // On concatène le chemin source avec le nom du fichier source+=nom_du_fichier; // On concatène le chemin destination avec le nom du fichier destination+=nom_du_fichier; //debug qDebug() << source; qDebug() << destination; //affichage du chemin source QLabel *test = new QLabel(" source : " + source, this); test->move( (ResX - test->minimumSizeHint().width())/2,0.375*ResY ); //affichage du chemin de destination QLabel *test1 = new QLabel(" destination : " + destination, this); test1->move( (ResX - test1->minimumSizeHint().width())/2,0.475*ResY ); //Nom du fichier en cours de copie QLabel *test3 = new QLabel(" fichier en cours de copie : " + nom_du_fichier, this); test3->move( (ResX - test3->minimumSizeHint().width())/2,0.575*ResY ); //nombre de fichiers dans la liste QString nombre=""; nombre=QString::number(nombre_de_fichiers); QLabel *test2 = new QLabel(" nombre de fichiers : " + nombre, this); test2->move( (ResX - test2->minimumSizeHint().width())/2,0.675*ResY ); // On spécifie le chemin source du fichier à copier QFile file(source); // On spécifie le chemin destination du fichier à copier file.copy(destination); } ProgressBar->setValue( 100 ); // SIGNAUX QObject::connect(bouton0, SIGNAL(clicked()) , qApp, SLOT( aboutQt() ) ); QObject::connect(bouton1, SIGNAL(clicked()) , qApp, SLOT( quit() ) ); }
MAIN.CPP
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 #ifndef DEF_MAFENETRE #define DEF_MAFENETRE #include <QApplication> #include <QWidget> #include <QPushButton> #include <QLCDNumber> #include <QSlider> #include <QInputDialog> class MaFenetre : public QWidget // On hérite de QWidget (IMPORTANT) { Q_OBJECT public: MaFenetre(); public slots: private: QPushButton *bouton0; QPushButton *bouton1; }; #endif
SETUP.INI ( à mettre dans le même repertoire que l'exe )
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 #include <QApplication> #include <QDirIterator> #include <QWidget> #include <QPushButton> #include <QLCDNumber> #include <QSlider> #include <QLabel> #include <QProgressBar> #include <QMessageBox> #include <windows.h> #include <QFile> #include <QString> #include <QFileDialog> #include <QObject> #include "fenetre.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); MaFenetre main_windows; main_windows.show(); return app.exec(); }
Sinon pour l'algorithme vous avez raison, je devrais en faire un. Mais quand on y connait rien et qu'on y va un peu comme ça c'est pas évident.
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 [section] // CHEMIN VERS L'ORDINATEUR DU TECHNICIEN S_XS ="C:\MinGW\OTHER\projets C\QTPROJECT\debug\PABX\XS\" S_xS2 ="%cd%\PABX\xS2\" S_D2A ="%cd%\PABX\D2A\" S_EASY ="%cd%\PABX\EASY\" S_ALCATEL ="%cd%\PABX\ALCATEL\" S_VOCALD6 ="%cd%\PABX\VOCAL D6\" S_SAUVMATRA ="%cd%\PABX\SAUV MATRA\" S_MATRAPARALLELE="%cd%\PABX\MATRAPARALLELE\" // CHEMIN VERS L'INTRANET D_XS ="C:\MinGW\OTHER\projets C\QTPROJECT\debug\SAVE\XS\" D_xS2 ="%cd%\SAVE\xS2\" D_D2A ="%cd%\SAVE\D2A\" D_EASY ="%cd%\SAVE\EASY\" D_ALCATEL ="%cd%\SAVE\ALCATEL\" D_VOCALD6 ="%cd%\SAVE\VOCAL D6\" D_SAUVMATRA ="%cd%\SAVE\SAUV MATRA\" D_MATRAPARALLELE="%cd%\SAVE\MATRAPARALLELE\"
Dans les bouts de code que j'ai assemblé grâce aux différentes personnes qui m'ont aidé, je ne vois pas où cela pêche sinon le filtre.
J'ai bien évidement regardé vos sources l'autre jours mais c'est un peut trop compliqué pour moi. Puis les noms de variables et fonctions ne me sont pas trop explicites et comme je n'ai pas envie de pomper et que je veux essayer de m'en approprier le plus possible je ne souhaite pas copier votre code qui je n'en doute pas fonctionne parfaitement.
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
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