Bonjour à tous,
Je travaille sous VS2003 et Qt 3.3. Je dispose dans mon appli d'une classe principale qui se compose entre autres de deux fenêtres:
- la principale qui permet d'utiliser l'application et qui héritent de QMainWindow (WndWizard)
- la seconde qui est affichée lorsqu'il y a un temps de traitement et qui héritent de QDialog (WndAttente). Elle dispose d'un QLabel, d'une QProgressBar et d'un QPushButton (rien de très original en somme)
Le problème est que lorsque je fait mon ".show()" sur l'instance de ma WndAttente celle ci vient s'afficher au premier plan de TOUTES les applications tournant sur mon PC, cad que lors d'un traitement long je tente de travailler sur une autre application, je suis interrompu à chaque ".show()" (parce que ma fenêtre WndAttente évolue et passe par des ".hide()")... J'ai déjà tenté pas mal de choses mais rien n'y fait!
Après des recherches sur un autre forum (Qt fr - merci à eux ), nous en sommes arrivé à la conclusion que le problème était certainement lié au fait que ma fenêtre d'attente WndAttente ne possadait pas de parent...
Un peu de code pour mieux comprendre:
Dans le Cas 1, j'ai l'erreur de compilation suivante:
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 //ClasseGenerale.h class ClasseGenerale : public QObject { Q_OBJECT //... private: WndAttente* mpWndAttente; WndWizard* mpWndWizard; //... } //ClasseGenerale.cpp ClasseGenerale::ClasseGenerale(): /*...*/, //Cas 1: mpWndWizard(NULL), mpWndAttente(mpWndWizard) /*OU*/ //Cas 2: mpWndWizard(new WndWizard (NULL)), mpWndAttente(new WndWizard(mpWndWizard)) {/*...*/} //WndWizard.h class WndWizard : public QMainWindow { Q_OBJECT //... public: WndWizard( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel ); //... } //WndWizard.cpp WndWizard::WndWizard( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) {/*...*/} //WndAttente.h class WndAttente : public QDialog { Q_OBJECT //... public: WndAttente( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); //... } //WndAttente.cpp WndAttente::WndAttente( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) {/*...*/} //-------------------------------------------------------------------------------------------------- //Affichage de la fenêtre Générale: mpApplication->setMainWidget( mpWndWizard ); mpApplication->connect( mpApplication, SIGNAL( lastWindowClosed() ), mpApplication, SLOT( quit() ) ); mpWndWizard->showMaximized(); //Affichage de la fenêtre d'attente mpWndAttente()->mProgressBar->setTotalSteps( (int)vectorIndexCellDetectAuto.size() ); mpWndAttente()->mProgressBar->setProgress(0); mpWndAttente()->mProgressBar->show(); mpWndAttente()->show();
et dans le Cas 2, j'ai la compilation passe bien mais dès le passage dans la première ligne de code dans ce cas, le curseur de debbugage s'en vas se balader je ne sais pas ou et l'exécution est stoppée avec le message suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ClasseGenerale.cpp : error C2440: 'initialisation' : impossible de convertir de 'WndWizard *' en 'WndAttente *' Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction ClasseGenerale.cpp: error C2439: 'ClasseGenerale::mpWndAttente' : impossible d'initialiser le membre ClasseGenerale.h(465) : voir la déclaration de 'ClasseGenerale::mpWndAttente'
J'ai désactivé toutes les optimisations de code, nettoyer et recompiler maintes fois, ... je ne sais plus vraiment quoi faire alors si quelqu'un a la moinre idée, je suis plus que prenneur !
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 'Forecast.exe' : Chargé 'H:\...\Visual.NET\Debug\Forecast.exe', Les symboles ont été chargés. 'Forecast.exe' : Chargé 'C:\WINNT\system32\NTDLL.DLL', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\Qt\3.3.3\bin\qt-mt333.dll', Aucun symbole n'a été chargé. 'Forecast.exe' : Chargé 'C:\WINNT\system32\KERNEL32.DLL', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\USER32.DLL', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\GDI32.DLL', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\ADVAPI32.DLL', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\rpcrt4.dll', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\SHELL32.DLL', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\shlwapi.dll', Aucun symbole n'a été chargé. 'Forecast.exe' : Chargé 'C:\WINNT\system32\msvcrt.dll', Aucun symbole n'a été chargé. 'Forecast.exe' : Chargé 'C:\WINNT\system32\comctl32.dll', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\OLE32.DLL', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\imm32.dll', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\WINSPOOL.DRV', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\mpr.dll', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\msvcr71.dll', Les symboles ont été chargés. 'Forecast.exe' : Chargé 'H:\TORINO\Forecast\Visual.NET\qwt.dll', Aucun symbole n'a été chargé. 'Forecast.exe' : Chargé 'C:\WINNT\system32\OLEAUT32.DLL', Impossible de trouver ou d'ouvrir un fichier DBG requis. 'Forecast.exe' : Chargé 'C:\WINNT\system32\tsappcmp.dll', Impossible de trouver ou d'ouvrir un fichier DBG requis. Le programme '[3076] Forecast.exe: Natif' s'est arrêté avec le code 1 (0x1).
Merci d'avance a tous!
Partager