IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

problème en mode release


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut problème en mode release
    Bonjour a tous,

    Voilà je rencontre un problème qui est pour l’instant a mon niveau incompréhensible. J’ai développé une application Qt qui utilise Qwt. Dans une de mes classes je déclare un Qwtplot. J’ai compilé l’ensemble en mode debug -> la tout fonctionne.
    Maintenant je dois compiler en mode release -> à la compilation pas d’erreur ni de warning. Mais lors de l’exécution du programme je rencontre l’erreur suivante :
    Debug error!
    Program : ...
    Module : 4.2.2
    File Global\qglobal.cpp
    line : 2001

    QWidget : must construct a qApplication before a QpaintDevice
    Je clique sur ignorer puis j’ai :
    Debug error!
    Program : ...
    Module : 4.2.2
    File Global\qglobal.cpp
    line : 2001

    QWidget : cannot create a Qwidget when no GUI is being used.
    De nouveau je clique sur ignorer :
    Debug error!
    Program : ...
    Module : 4.2.2
    File Global\qglobal.cpp
    line : 2001

    Assert : "uncreated widgets" in file kernel\qwidget.cpp, line 901
    Et finalement mon application plante :
    unhauled exeption at 0x0047db2c (QtGui4) in XXX.exe : 0xC0000005 : access violation reading location 0x00000000
    Il s’arrête dans le fichier Qhash.h à la ligne 239. Je pense (en faite pas sur du tout) que le pointeur qui pointe sur 0x00000000 est "This".

    Voilà il me dit de faire une Qapplication avant, pourquoi pas mais comment je l’intègre au code. Ce n’est pas fait quand il passe dans le constructeur ? Et dans la documentation de Qapplication, il parle de int argc et char **argv, que représente t’il ?
    De plus j’ai l’impression que c’est un problème de pointeur (selon la dernière erreur). Ou qu'il ne passe pas par le constructeur?
    Voilà si certain on des pistes pour corriger ses erreurs je suis preneur. Je mets en suite la partit du code qui semble posée problème :

    Appel de ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Maclasse **page_visu;
    page_visu=(Maclasse**) malloc(20*sizeof(MAclasse*));
    page_visu[i]= new page_visualisation1();
    page_visu[i]->creation_page(...);
    Puis ma fonction:
    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
       void page_visualisation1::creation_page()
    {
     
    ….
     
    dial2->ajout_chemin(nom_variable_visua,p);
    myPlot = new QwtPlot(nom_variable_visua);
     
    	//créé un layout et intègre les éléments 
    layout = new QHBoxLayout(this);
    layout->addWidget(myPlot);
     
    creer_menu();
    creer_courbe();
     
    myPlot->setMargin(2);
    QString titre_axe_x("Temps en seconde");
    myPlot->setAxisTitle(2,titre_axe_x);
     
    QString titre_axe_y("Valeur du modèle");
    myPlot->setAxisTitle(0,titre_axe_y);
     
    QColor couleur1 = QColor(190,240,240,50);
    myPlot->setCanvasBackground(couleur1);
     
     
    	//dimmenssionne et affiche la page
    resize(600,300);
    show();
     
    base_temps();
    }
    Dernière info : j'utilise visual studion 2005 SP1 avec Qt 4.2.2 et Qt intègration.

    Merci pour vos réponsses. Et bon week end de paque à tous.

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Le code que tu montres ne pose pas d'erreur. Il y aurait plutôt une variable déclaré/instancié avant main qui pose problème. Un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QWidget w;
     
    int main(int argc, char **argv)
    {
        QApplication app(argc, argv);
    ...
    Alors bien sûr, ça peut être dans un autre fichier.
    Pour trouver, tu peux toujours tenter de mettre un breakpoint sur la première ligne de ton main (qui devrait être l'instanciation de QApplication par sécurité).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut
    Bonjour, merci pour ta réponse, mais hélas je ne trouve toujours pas. Peu être ne suis pas douée voilà le code de mon main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     #include <QtGui/QApplication>
    #include "polux_application.h"
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
    	Polux_application p;
    	p.show();
    	return a.exec();
    }
    Il est très simple donc je pense pas que l’erreur soit la. Dans le constructeur de polux_application, j’instancie deux classes : Explorateur et dialogue (qui a priporis ne pose pas de problème). C’est à l’appelle de Maclasse (page_visualisation) que le bug se produit. Celle-ci est instancier dans polux application. Doit je recréé une Qapplication avant de l’appeler ?
    Surtout je me demande pourquoi sa fonctionne en mode débug et pas en mode release ??
    je vous remercie d'avance, vraiment beaucoup.

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    ca doit un problème de pointeurs mal alloué. Mais avec le bout de code la je ne vois pas :s

  5. #5
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Désolé, j'ai lu un peu trop rapidement ton premier post:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Maclasse **page_visu;
    page_visu=(Maclasse**) malloc(20*sizeof(MAclasse*));
    Je doute que ça résolve le problème mais commence par utiliser new[], ce sera plus propre.

    Pour ce qui est de l'erreur, ce que je te donnais est une piste, pas forcément dans le main. Si dans polux.cpp, tu as (par exemple) en dehors de toute méthode un
    QPixmap Polux::machin(":/res/pixmap.png");
    Tu auras alors le même souci, à savoir l'initialisation d'une ressource alors qu'il n'y a pas de QApplication. Ceci dit... je vois pas pourquoi ça fonctionnerait en mode debug... Tu pourrais poster le code complet où tu alloues le tableau page_visu stp?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut
    Bon voila maintenant j'utilise l'opérateur new[], mais cela ne résout pas mes problèmes…

    page_visu est sensée être un tableau de pointeur sur ma classe Page_visualisation1, qui est instancier plusieurs fois dans le programme. En effet cette classe est appelée avec des paramètres et j’ai besoin de connaître son adresse pour lui renvoyer les bonnes informations par la suite.

    Alors le plus simple, je vous envoie le code quasi complet, ainsi que le point h complet :

    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
     
    #ifndef POLUX_APPLICATION_H
    #define POLUX_APPLICATION_H
     
    #include <QtGui/QMainWindow>
    #include "ui_polux_application.h"
    #include "Explorateur.h"
    #include "Dialogue.h"
    #include "page_visualisation1.h"
    #include <QString>
    #include <QMessageBox>
     
    class Polux_application : public QMainWindow
    {
    	Q_OBJECT
     
    public:
    	//Constructeur
    	Polux_application(QWidget *parent = 0, Qt::WFlags flags = 0);
    	//Destructeur
    	~Polux_application();
     
    private:
    	Ui::Polux_applicationClass ui;
    	Explorateur *exploreur;
    	Dialogue *dial;
    	QString path_model;
    	int cpt_page;
    	int nb_fenetre;
    	bool test_execute;
    	bool test_connect;
    	bool test_deconnection;
    	page_visualisation1 **page_visu;
    	QString titre_courbe;
    	QString texte_courbe;
    	QMessageBox* message_courbe;
     
    	QString nom_variable_visu;
     
    private slots:
    	void on_button_charger_clicked();
    	void on_actionOuvrir_Dictionnaire_triggered();
    	void on_actionOuvrir_Mod_le_triggered();
    	void on_Fermer_polux_appliction_triggered();
    	void on_executerButton_clicked();
    	void creer_page();
    	void pause_page();
     
    };
    #endif // POLUX_APPLICATION_H
    et maintenant le code :
    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
     
    #include "polux_application.h"
    Polux_application::Polux_application(QWidget *parent, Qt::WFlags flags)
    	: QMainWindow(parent, flags)
    {
    ui.setupUi(this);
    exploreur = new Explorateur();
    dial = new Dialogue();
     
    page_visu = new page_visualisation1* [20];
     
    test_execute=true;
    test_connect=true;
    cpt_page=1;
    }
     
    Polux_application::~Polux_application()
    {
    	if (test_connect==false)
    	{
     dial->stop_timer();
     dial->reset_disconnect_model();
    	}
    }
     
    void Polux_application::pause_page()
    {
    for (int i=0;i<nb_fenetre;i++)
    {
    	page_visu[i]->~page_visualisation1();
    }
    }
     
    void Polux_application::creer_page()
    {
    switch (cpt_page)
    {
    	case 1:
    		{
    		nom_variable_visu="rtdemo1/sm_computation/port2";
    		page_visu[0]->creation_page(page_visu[0], dial,nom_variable_visu);
    		cpt_page=2;
    		}break;
     
    // Les cases continue jusqu’a 20 : j’en suis pas fier mais c’est du temporaire, disons afin de tester cette partit de l’application avant de passer à la suite ou nom_variable_visu sera renseigner par l’application elle même.
     
     
    	case 20:
    		{
    			nom_variable_visu ="rtdemo1/sm_computation/Sensor response time/port1";
    		page_visu[19]->creation_page(page_visu[19], dial,nom_variable_visu);
    		cpt_page=21;
    		}break;
    	case 21:
    		{
    			titre_courbe="Affichage";
    			texte_courbe="Vous demandez l affichage de trop de fenêtre visualisation : le maximum de fenêtre est de 20. ";
    			message_courbe= new QMessageBox(QMessageBox::Critical,titre_courbe,texte_courbe,QMessageBox::Ok);
    			message_courbe->exec();
    		}break;
    }
    }
     
    void Polux_application::on_executerButton_clicked()
    {
    	if(test_execute==true)
    	{
    	bool test_exec = dial->executer_model();
    		if (test_exec == true)
    		{
    		test_execute=false;
    		ui.executerButton->setText("Stop");
    		nb_fenetre=6;
    			cpt_page=1;
    			for (int i=0;i<nb_fenetre;i++)
    			{
    			page_visu[i] = new page_visualisation1;
    			creer_page();
    			}
    		}
    	}
    	else
    	{
    	bool test_pause = dial->pause_model();
    		if (test_pause == true)
    		{
    		ui.executerButton->setText("Exécuter");
    		test_execute=true;
    		pause_page();
    		}
    	}
    }
    //je n’est pas mis le reste car cela ne concerne pas les pointeurs page_visu…
    Voilà le code qui concerne le tableau de pointeur de ma classe, l’erreur ce produit j’appuie sur le bouton exécuter et donc quand je rentre dans void Polux_application::on_executerButton_clicked(). J’ajoute que c’est le constructeur de cette classe qui est appellée dans le main.

    Je vous remercie tous de votre aide et surtout IrmatDen… MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème en mode release
    Par ziteak dans le forum Débuter
    Réponses: 2
    Dernier message: 05/03/2011, 18h25
  2. Problème en mode Release
    Par moooona dans le forum C#
    Réponses: 0
    Dernier message: 06/01/2011, 12h49
  3. Problème bizarre en mode Release
    Par jagboys dans le forum C++/CLI
    Réponses: 4
    Dernier message: 20/12/2007, 16h11
  4. Problème "ON_CONTROL_RANGE" mode release
    Par BoyzInDaProject dans le forum MFC
    Réponses: 5
    Dernier message: 11/05/2007, 17h24
  5. [VB.NET] Problème exécution en mode release.
    Par leSeb dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/01/2005, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo