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

Discussion :

Imprimer sans QPrintDialog, est-ce possible ?

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Façonnier
    Inscrit en
    Août 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Façonnier
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 31
    Par défaut Imprimer sans QPrintDialog, est-ce possible ?
    Le super codeur en devenir vous salue Ô vous les maîtres de la connaissance

    Il me fallait imprimer des feuilles avec Qt Win C++, alors paf ! J’ai cherché et j’ai trouvé suffisamment d’éléments pour monter une superbe routine d’impression.
    Elle aurait pu être excellente si l’obligation de cliquer sur le bouton de la fenêtre QPrintDialog n’avait pas ce petit côté intempestif, dérangeant et gênant, de même que bloquant car le programme ne continue pas son bonhomme de chemin, si l’utilisateur n’a pas cliqué sur ce bouton OK. En fait il faudrait pouvoir imprimer directement sur l’imprimante par défaut du système.
    Ainsi il me fallait une nouvelle routine d’impression avec Qt Win C++, alors paf ! J’ai cherché et… je n’ai rien trouvé. Et ce n’est pas faute d’avoir cherché, peut-être avec les mauvaises expressions, j’en conviens, mais nombre de forums, FAQ, exemples sur la toile qui n’ont vu ce fouilleur et trifouilleur de site Qt Cpplusplusserale que je fus.

    J’ai même demandé sur certains site aide et connaissance, mais mis à part quelques liens que j’avais déjà visité, je n’ai eu aucune réponse valable. C’est pourquoi finalement, je me permets de venir vous déranger Ô grands maîtres en espérant que vous, vous aurez la réponse à ma question.
    Par avance je vous remercie pour votre aide.

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    J'ai jamais fais mais avec QPrinter cela n'est pas possible ???
    Regarde ici a mon avis cela pourra t'aider.
    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.

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Bonjour, désolé de ne pas te suivre dans ce style littéraire, mais continue c'est excellent

    Peux-tu montrer le code actuel que tu utilises pour imprimer (enfin si tu n'y arrives pas avec les infos ci-après) ? Parce qu'effectivement, tu peux configurer directement ton objet QPrinter sans avoir besoin de la fenêtre QPrintDialog.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QPrinter* m_pPrinter = new QPrinter ( QPrinterInfo::defaultPrinter() );
    m_pPrinter->setPaperSize ( QPrinter::A4 );
    m_pPrinter->setOrientation ( QPrinter::Portrait );
    // etc etc
    objetAimprimer.print ( m_pPrinter );
    Donc à étudier QPrinter et QPrinterInfo.

  4. #4
    Membre averti
    Homme Profil pro
    Façonnier
    Inscrit en
    Août 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Façonnier
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 31
    Par défaut
    Maitre Troudhyl

    Me suivre dans ce style littéraire est un choix qui n’appartient qu’à celui qui le désire et l’accepte comme tout naturel. Donc, en conséquence, nulle obligation, nulle vexation ni nul gant jeté à mes pieds. Je ne prendrais point la mouche ni l’épée de l’honneur bafoué. Simplement je lirai avec attention quelques conseils qui me serviraient fort pour mon projet grandiose et grandiloquent.

    Voilà cher maître la routine par vous demandée. Je quémande votre pardon si dans ce qui suit, il y a autre souci que le susdit en titre de ce sujet.

    Le souci secondaire, qui ne l’est que dans la hiérarchie de ce post, est que, bon sang de bois, je n’arrive pas à me faire respecter par le pâle et fat Qt Win C++. Il ne veut accepter le retour chariot qu’il est de mon devoir de lui imposer dans mes QString.

    Que ce soit les </br>, les \r\n, rien ne lui plait tant que de les ignorer superbement. Sur ce sujet, je suppute une raison qui m'échappe encore.

    Au devant de ces échecs successifs, un certain état fébrile fragilise de façon certaine et presque permanente, mon comportement pourtant si paisible habituellement.
    Quant à la première demande, imprimer sans passer par la fenêtre QPrintDialog, elle est toujours en cours, bien que cette routine suivante fonctionne presque parfaitement… Si ce n’est la fenêtre QPrintDialog qui s’affiche.
    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
     
    QString livrerChez ="M.Machin Truc";
                livrerChez.append("</ br>");
                livrerChez.append("28, rue Chose");
                livrerChez.append("</ br>");
                livrerChez.append("16900 Trifouillis-les-Oies-Naines");
           // QPrinter printer = new QPrinter(QPrinter::HighResolution);
            QPrinter printer;
            printer.setFullPage(true);
            printer.setPaperSize(QPrinter::A4);
            printer.setOrientation(QPrinter::Portrait);
            //Emplacement pour préparer ou appeler les feuilles à imprimer
            QString var = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
           var.append( "<html xmlns=\"http://www.w3.org/1999/xhtml\">");
           var.append( "<head>");
           var.append( "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
           var.append( "<title>Bon de livraison</title>");
           var.append( "</head>");
           var.append( "<body>");
          var.append( "<table>");
           var.append( "<tr>");
           var.append( "<td align=\"center\">");
           var.append( "La Super Entreprise qui fait des Super Trucs Utiles");
           var.append( "<br /><br /><br /><br /><br /></td>");
           var.append( "<tr><td>");
           var.append( "Adresse de livraison :");
           var.append( "<br />");
           var.append( "<strong>");
           var.append( livrerChez);
           var.append( "</strong>");
           var.append( "<br /><br /><br /><br /><br /><br /><br />");
           var.append( "Bon de livraison du : <strong> <!--Date courante ici--> </strong>");
           var.append( "<br /><br />");
           var.append("Référence  affaire : <strong> <!--Référence de l'affaire ici--> </strong>");
           var.append(  "<br /><br />");
           var.append( "Nom du client : <strong> <!-- Le nom du client ici--> </strong>");
           var.append( "<br /><br />");
           var.append( "Quantité livrée : <strong> <!-- La quantité livrée--> </strong>");
           var.append( "<br /><br />");
           var.append( "Nombre de cartons : <strong> <!-- Le nombre de cartons--> </strong>");
           var.append( "<br /><br />");
           var.append( "Nombre de palettes : <strong> <!-- Le nombre de palettes--> </strong>");
           var.append( "<br /><br />");
           var.append( "</table></body></html>");
            QTextDocument leBonDeLivraison;
           // laPageHtml.setHtml(var);
            leBonDeLivraison.setHtml(var);
            QPrintDialog *dialog = new QPrintDialog(&printer, this);
            dialog->setWindowTitle(tr("Print Document"));
           /* if (recupTextEdit()->textCursor().hasSelection())
                dialog->addEnabledOption(QAbstractPrintDialog::PrintSelection);*/
            if (dialog->exec() == QDialog::Accepted)
                leBonDeLivraison.print(&printer);
            return;
    Voilà toute nue, soumise à vos regards, cette routine aux formes généreuses… Que dis-je ? Où vais-je ? Cette routine point.
    Merci pour votre aide précieuse et quémandée.
    Serviteur monsieur.

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Ses formes sont très généreuses en effet et auraient pu être épurées pour se focaliser sur l'essentiel, mais passons
    Quant à la première demande, imprimer sans passer par la fenêtre QPrintDialog, elle est toujours en cours, bien que cette routine suivante fonctionne presque parfaitement… Si ce n’est la fenêtre QPrintDialog qui s’affiche.
    En même temps si tu la crées et l'affiches, alors oui elle va se créer et s'afficher. Après tout, cette boîte de dialogue ne sert qu'à ce que l'utilisateur puisse paramétrer le QPrinter (pour ça que tu le passes en paramètre), et comme je l'ai dit au-dessus, on peut très bien le paramétrer entièrement dans le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QPrintDialog *dialog = new QPrintDialog(&printer, this); // on vire
    dialog->setWindowTitle(tr("Print Document")); // on vire
    if (dialog->exec() == QDialog::Accepted) // et on vire
        leBonDeLivraison.print(&printer); // ok
    Apparemment il n'y a pas de méthode pour définir l'imprimante, à part un constructeur, donc il faut remplacer QPrinter printer; par QPrinter printer ( QPrinterInfo::defaultPrinter() ); et le tour est joué.

    Concernant la deuxième question, </br> n'existe pas contrairement à <br /> qui est utilisé après et qui fonctionne bien. Du coup y'a que l'objet livrerChez qui ne va pas. Pour le reste, j'ai copié/collé le code pour tester et j'ai bien les retours à la ligne, et j'imprime bien (en PDF, et sans QPrintDialog svp) avec une bonne présentation. Juste un petit souci d'accents réglé à la bourrin avec QTextCodec. Donc à mon avis tout marche impec ensuite

  6. #6
    Membre averti
    Homme Profil pro
    Façonnier
    Inscrit en
    Août 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Façonnier
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 31
    Par défaut
    Maître Troudhyl

    Un grand merci. Comme je me l'imaginais, vous venez par vos conseils judicieux de me prouver combien vous baignez dans la connaissance infuse.
    Maintenant j'imprime tout comme je le désirais dans tous les sens du terme d'ailleurs, au premier degré tout comme au second. Encore un grand merci.

    Puis-je encore me permettre de solliciter chez vous cette connaissance merveilleuse qui me manque tant. En effet je me demande comment dans un QString l'on pourrait amener à la ligne par un retour chariot ou autre ce que l'on désirerait... amener à la ligne.

    Pour exemple le "QString "livrerChez" de ma routine. Ce QString contient obligatoirement une adresse avec les retours de lignes qui conviennent à une adresse.
    M. Machin Chose (retour de ligne)
    25, boulevard des Bouteilles en Plastique (retour de ligne)
    25 365 TrucVille (retour de ligne)
    Tel : 0 736 254 897

    Par avance je vous remercie cher maître pour votre attention et le partage de vos connaissances.

    Maintenant si la question est de trop dans ce post, je m'en voudrais de vous importuner par une intempestive question qui n'a pas lieu d'être ici. Dans ce cas j'ouvrirai immédiatement un autre post et m'excuserai bien bas de cette odieuse insistance sur un sujet pour un autre...
    Merci pour compréhension...

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

Discussions similaires

  1. $_GET mais sans formulaire, est-ce possible ?
    Par new-dmx dans le forum Langage
    Réponses: 6
    Dernier message: 04/08/2008, 15h58
  2. Réponses: 1
    Dernier message: 15/04/2008, 21h52
  3. somme colonne avec exception sans macro est ce possible?
    Par dkmix dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/12/2007, 12h01
  4. Linux sans Internet, est-ce possible ?
    Par JavaAcro dans le forum Linux
    Réponses: 28
    Dernier message: 27/09/2007, 21h40
  5. Utilisation de composant sans Form est elle possible
    Par Hypollite76 dans le forum Composants VCL
    Réponses: 26
    Dernier message: 01/12/2005, 12h07

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