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 :

Impression qui fait freezer le programme


Sujet :

Qt

  1. #1
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut Impression qui fait freezer le programme
    Bonjour,

    J'ai ecrit un programme avec QT ou, en cliquant sur le bouton imprimer, un slot contenant le code suivant est executé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    QPrinter *p_printer = new QPrinter();
    QPrintDialog printDialog(p_printer, NULL);
    if (!printDialog.exec()) return false;
    p_printer->setFullPage(true);
     
    QTextDocument facture;
    facture.setHtml(gTemplate.Parse());
    facture.print(p_printer);
    Avant ca fonctionnais très bien mais maintenant (peut etre depuis une mise a jours) mon application freeze lors de l 'appel à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    facture.print(p_printer);
    Est ce que quelqu'un à une idée d'ou cela peux provenir ?

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Points : 93
    Points
    93
    Par défaut
    Je n'ai pas vraiment d'idées. Il faudrait trouver ce qui a changé, ou alors déboguer le programme pour voir où il « freeze. »

  3. #3
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Bah justement, rien n'as changer a part peut etre ma version de Qt (Je travail sous debian etch).

    Et de plus je ne peux pas deboguer vu que l'erreur se produit dans la fontion QTextDocument::print() de Qt et je n'ai pas acces aux sources :/

    J'ai bien vérifier les données que j'injecte et elles sont correctes.

    Il doit rentrer dans une boucle infinie vu que mon processeur tourne à 100% au moment du freeze mais impossible d'en savoir plus :/

    Je vais continuer de chercher mais je suis bien emmerder pour le coup :/

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par Higestromm
    Bah justement, rien n'as changer a part peut etre ma version de Qt (Je travail sous debian etch).
    Quelque chose a forcement changé. Est-ce que la version de Qt a changé ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par Higestromm
    J'ai bien vérifier les données que j'injecte et elles sont correctes.
    Peut-on voir ces données ? Le plus simple serait de reproduire le problème avec un programme d'exemple minimal mais compilable.

  6. #6
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Bon... j'ai refait un programme simple d'impression mais rien à faire ...

    voici le .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
    #ifndef __TEST_H__
    #define __TEST_H__
     
    #include <QWidget>
     
    class Test : public QWidget
    {
    	Q_OBJECT
    	/** Constructeur **/
    	public : Test(QWidget *parent=0);
     
    	/** Fonction appelée lors du clic sur le bouton */
    	public slots : int Activate();
    };
     
    #endif // __TEST_H__
    et la le .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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include "test.h"
     
    #include <QApplication>
    #include <QPrinter>
    #include <QPrintDialog>
    #include <QPushButton>
    #include <QTextDocument>
    #include <QTextStream>
     
    Test::Test(QWidget *parent) :
     QWidget(parent)
    {
    	QPushButton *bouton = new QPushButton("Imprimer", this);
     
    	connect(bouton, SIGNAL(clicked()), this, SLOT(Activate()));
    }
     
    int Test::Activate()
    {
    	QTextStream cout(stdout);
    	cout << "Impression en cours..." << endl;
     
    	QPrinter *p_printer = new QPrinter();
    	QPrintDialog printDialog(p_printer, NULL);
    	if (!printDialog.exec()) return false;
    	p_printer->setFullPage(true);
     
    	QTextDocument facture;
    	facture.setPlainText("Test d'impression");
    	facture.print(p_printer);
     
    	cout << "Impression en terminée." << endl;
    	return 1;
    }
     
    int main( int argc, char ** argv ) 
    {
    	QApplication application(argc, argv);
    	Test test;
    	test.show();
    	return application.exec();
    }
    Avec ca il me fait la même erreure ...

    Pour info j'utilise Qt 4.2.1

    Je ne comprend pas du tout le problème la :/

    C'est grave docteur ?

  7. #7
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    bon... je ne sait pas si ca vous avance mais si je vire la ligne :

    p_printer->setFullPage(true);

    Il ne freeze plus... mais il n'imprime toujours pas.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Points : 93
    Points
    93
    Par défaut
    J'ai essayé un programme plus court avec Qt 4.2.2 sous Linux :
    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
    #include <QApplication>
    #include <QPrinter>
    #include <QPrintDialog>
    #include <QTextDocument>
    #include <QTextStream> 
    int main(int argc, char ** argv) {
        QApplication application(argc, argv);
        QTextStream cout(stdout);
        cout << "Impression en cours..." << endl;
        QPrinter printer;
        QPrintDialog printDialog(&printer, NULL);
        printDialog.exec();
        printer.setFullPage(true); 
        QTextDocument facture;
        facture.setPlainText("Test d'impression");
        facture.print(&printer);
        cout << "Impression OK." << endl;
    }
    Ça a l'air d'imprimer sans problème dans un fichier en PDF.

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    D'ailleurs, il y a une fuite mémoire dans ton programme, Higestromm...

  10. #10
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Non avec ce code ca freeze toujours :/
    Et ca le fait pas que chez moi ca le fait aussi chez mon ami qui bosse avec moi sur le projet :/ Il a la même version de Linux / Qt que moi.

    @Miles oui je sait pour la fuite mémoire. Elle n'existe pas sur mon programme final, la c'était juste une syntèse de mon problème que j'ai fait sans me soucier de cela

    Je voulais essayer de compiler sur une autre version de Qt mais le disque dur de mon autre à cramer pendant la compilation (non je n'ai vraiment pas de chance )

    PS : Après vérification mon processeur tourne pas a 100% lors du freeze mais a 0%

  11. #11
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Pour l'impression sous linux on utilise CUPS au fait. Tu l'utilise aussi dimitri ?

    Comment as tu installer la version 4.2.2 ?

  12. #12
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Bon... j ai essayer d'installer Qt 4.2.2 Avec support MysQl (j en ai besoin) et a la configuration il m'annonce que :

    MySQL support cannot be enabled due to functionality tests!
    Je sent que la malchance m'entoure :/

  13. #13
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    J'ai essayer le petit programme de test avec la version 4.2.2 et ca marche nikel.

    Je vais devoir attendre qu'une nouvelle version de Qt débarque sur ma Debian je crois.

    Merci a vous

  14. #14
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    UP

    Après un petit moment ou ca à bien fonctionné, une mise a jours vers la version 4.4.2-2 et boum... ca imprime de nouveau plus :/

    Je me demandais si ca arrivais souvent ce genre de trucs avec Qt parce que ca commence a devenir vraiment délicat au niveau des mises a jours :/

    Edit : Le programme ne freeze pas par contre. Tout se passe comme si ca imprimais mais rien n'arrive dans le spool de l'imprimante et Cups ne me retourne aucune erreure

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Points : 93
    Points
    93
    Par défaut
    Je compile Qt à partir des sources sur une machine Fedora Core utilisant CUPS. Je n'ai jamais eu de problème.
    Peut-être un problème avec les packages fournis par Debian ?

  16. #16
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Le problème s'est effectivement produit sous Debian et sous Ubuntu. Ceci dit, après mise a jours de l'Ubuntu le problème s'est résolu.

    Ce qui est frustrant c'est qu'il ne retourne aucune erreure :/

Discussions similaires

  1. fonction dans dll qui fait planter programme
    Par chris069 dans le forum C++
    Réponses: 22
    Dernier message: 28/04/2009, 17h19
  2. Réponses: 3
    Dernier message: 01/03/2009, 19h09
  3. programme en java qui fait la communication via modbus
    Par maximus_yassine dans le forum Langage
    Réponses: 1
    Dernier message: 29/02/2008, 16h16
  4. [QThread] QThread qui fait figger le programme
    Par alpha_one_x86 dans le forum Multithreading
    Réponses: 1
    Dernier message: 29/11/2007, 11h16
  5. Réponses: 13
    Dernier message: 02/11/2006, 16h12

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