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 :

Comment imprimer ?


Sujet :

Qt

  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut Comment imprimer ?
    Bonjour, comme le dit le titre, je cherche comment imprimer en Qt.

    - Soit vous savez comment on fait et vous postez une réponse expliquant comment faire(mais ça m' étonnerais)

    - Soit vous savez (ou pas) comment on fait mais c' est BEACOUP trop long à expliquer sur un forum et vous envoyez un lien d' un tuto qui l' explique(hé oui je n' en ai pas trouvé!!)

    - Soit vous savez comment on fait mais vous ne voulez pas l'expliquer, donc vous me donnez directement le code à taper dans mon projet(ça m' étonnerais aussi)

    Si vous choisissez tout de même la dernière solution, voici mon projet(éditeur de texte):

    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
    /*main.cpp*/
     
    #include <QApplication>
    #include <QtGui>
    #include "FenPrincipale.h"
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QString locale = QLocale::system().name();
        QTranslator translator;
        translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
        app.installTranslator(&translator);
     
        FenPrincipale fenetre;
        fenetre.show();
     
        return app.exec();
    }
    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
    /*FenPrincipale.cpp*/
    #include <stdlib.h>
    #include <stdio.h>
    #include <QFile>
    #include "FenPrincipale.h"
     
    FenPrincipale::FenPrincipale()
    {
     
        QMenu *menuFichier = menuBar()->addMenu("&Fichier");
        ouvrir = new QAction("&Ouvrir...", this);
        menuFichier->addAction(ouvrir);
        enreg = new QAction("&Enregistrer sous...", this);
        menuFichier->addAction(enreg);
        enreg->setIcon(QIcon("101.png"));
        Imprimer = new QAction("&Imprimer", this);
        menuFichier->addAction(Imprimer);
        Imprimer->setIcon(QIcon("37.png"));
        QAction *actionQuitter = new QAction("&Quitter", this);
        menuFichier->addAction(actionQuitter);
        actionQuitter->setShortcut(QKeySequence("Ctrl+Q"));
        actionQuitter->setIcon(QIcon("quitter.png"));
     
     
        QMenu *menuEdition = menuBar()->addMenu("&Edition");
        choixPolice2 = new QAction("&Police...", this);
        menuEdition->addAction(choixPolice2);
     
     
        QMenu *menuAffichage = menuBar()->addMenu("&Affichage");
        QAction *afficherBE = new QAction("&Barre d' état", this);
        afficherBE->setCheckable(true);
        afficherBE->setChecked(true);
        menuAffichage->addAction(afficherBE);
     
        QToolBar *toolBarFichier = addToolBar("Fichier");
        toolBarFichier->addAction(actionQuitter);
        toolBarFichier->addAction(enreg);
     
        toolBarFichier->addSeparator();
     
        QFontComboBox *choixPolice = new QFontComboBox;
        toolBarFichier->addWidget(choixPolice);
        choixPolice->setEditable(false);
     
        QStatusBar *barreEtat = statusBar();
        barreEtat->showMessage("Prêt");
        actionQuitter->setStatusTip("Quitte le programme");
        enreg->setStatusTip("Enregistré!");
     
        QMdiArea *zoneCentrale = new QMdiArea;
     
        zoneTexte1 = new QTextEdit;
     
     
        QMdiSubWindow *sousFenetre1 = zoneCentrale->addSubWindow(zoneTexte1);
     
        zoneCentrale->setViewMode(QMdiArea::TabbedView);
     
        QObject::connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit()));
        QObject::connect(choixPolice2, SIGNAL(triggered()), this, SLOT(ouvrirDialogue()));
        QObject::connect(choixPolice, SIGNAL(currentFontChanged(QFont)), zoneTexte1, SLOT(setCurrentFont(QFont)));
        QObject::connect(enreg, SIGNAL(triggered()), this, SLOT(Save()));
        QObject::connect(afficherBE, SIGNAL(stateChanged(int)), barreEtat, SLOT(hide()));
        QObject::connect(ouvrir, SIGNAL(triggered()), this, SLOT(Open()));
        QObject::connect(Imprimer, SIGNAL(triggered()), zoneTexte1, SLOT(Print()));
     
     
        setCentralWidget(zoneCentrale);
     
     
     
    }
    void FenPrincipale::ouvrirDialogue()
    {
        bool ok = false;
     
        QFont police = QFontDialog::getFont(&ok, zoneTexte1->font(), this, "Choisissez une police");
     
        if (ok)
        {
            zoneTexte1->setFont(police);
        }
    }
    void FenPrincipale::Save()
    {
        QString fichier = QFileDialog::getSaveFileName(this, "Enregistrer un fichier", ".","Texte(*.txt)");
        if (fichier.isEmpty()) return;
        QFile file(fichier);
     
        if (file.open(QFile::WriteOnly | QFile::Truncate)) // si l'ouverture s'est bien passée
        {
            // permet d'écrire dans le fichier
            QTextStream out(&file);
            out << zoneTexte1->toPlainText();
            file.close();
        }
     
        else
            QMessageBox::warning(this,"Erreur","Une erreur s'est prosuite lors de l'ouverture du fichier");
     
    }
     
    void FenPrincipale::Open()
    {
        QString fichier = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "Texte (*.txt)");
     
        QFile file(fichier);
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;
     
        zoneTexte1->setText(QString(file.readAll()));
     
    }
    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
    /*FenPrincipale.h*/
     
    #ifndef HEADER_FENPRINCIPALE
    #define HEADER_FENPRINCIPALE
     
    #include <QtGui>
    #include <stdlib.h>
    #include <stdio.h>
    #include <fstream>
    #include <QFile>
     
     
    class FenPrincipale : public QMainWindow
    {
    	Q_OBJECT
     
    	public:
    		FenPrincipale();
     
     
        public slots:
            void ouvrirDialogue();
            void Save();
            void Open();
     
     
    	private:
        QAction *choixPolice2;
        QAction *ouvrir;
        QAction *enreg;
        QAction *Imprimer;
        QString *filename;
        QTextEdit *zoneTexte1;
     
    };
     
     
    #endif
    Voila, comme vous pouvez le voir, j'ai connecté 'Imprimer' avec 'Print' mais je n'ai pas encore crée cette fonction car j' ignore ce que je dois mettre à l'intérieur...

    Mais svp, choisissez une des 3 solutions car j'ai vraiment envie de savoir comment on imprime en Qt (ou autre)...

    En espérant des réponses...

  2. #2
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Sans être une solution complète, cette page de la doc devrait t'aider :
    http://doc.trolltech.com/4.4/printing.html

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut
    oui je sais j'y suis déjà allé sur cette page mais tout le code qu'ils donnent, je le comprend, je l'ai même intégré à mon projet(en modifiant quelques trucs) , ça compile, mais ça ne fait rien!!!

    édit: où a été déplacé ce sujet svp??? je ne le trouve pas!!

  4. #4
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut
    changement de programme:

    Après revue de mon code, j'ai réussi à imprimer!!!!

    Mais(!) L'imprimante ne prends en charge que les espaces mais rien d'autre(gras, italique, souligné, saut de lignes...) !!

    Comment garder la mise en forme du texte à l'impression svp?

    Voici la fonction(pas besoin du reste(si vous en avez besoin, y' a qu' a demander))

    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
    void FenPrincipale::imprimerTexte()
    {
        QPrinter printer;
        QTextDocument doc;
        QString TE = zoneTexte1->toPlainText();
        doc.setHtml(TE);
     
         QPrintDialog *dialog = new QPrintDialog(&printer, this);
         dialog->setWindowTitle(tr("Print Document"));
     
         if (zoneTexte1->textCursor().hasSelection())
             dialog->addEnabledOption(QAbstractPrintDialog::PrintSelection);
     
         if (dialog->exec() == QDialog::Accepted)
             doc.print(&printer);
             return;
    }
    Voila!!

  5. #5
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Je pense que c'est parce que tu extrait du plain text de zoneTexte1, donc tu perds les mises en formes.

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Effectivement, faudrait plutôt voir pour extraire en HTML.

  7. #7
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut
    ah d'accord!!!
    mais dans ce cas quelle fonction(si ça ne s'appelle pas comme ça dsl)appeler pour l'extraire en HTML ?

  8. #8
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575

  9. #9
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut Victoire!!
    J'ai réussi grace à vous!!! merci!! j'ai trouvé que c'était "zoneTexte1->toHtml" c'était pas sorcier

    édit: je viens de voir le lien merci

  10. #10
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut test imprimer
    bonjour moi aussi g voulu imprimer à partir Qt j'ai lu les documentations mentionnées mais j'ai pas trop piger .
    en fait j'ai commencé par un simple exemple pour tester l'impression comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     QPrintDialog printDialog (printer, this);
        printDialog.exec();
        QPainter painter (printer);
        printer->setPaperSize (QPrinter::A4);
        printer->setOrientation(QPrinter::Landscape);
        QTextDocument doc;
        QString TE = " test imprimante ";
        doc.setHtml(TE);
        doc.print(printer);

    mais la page s'imprime blanche, qu'est ce que j'ai raté ?

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 34
    Par défaut
    Excellent, cetopic
    Je me suis proposé de faire le petit ménage, pour rectifier les petites choses qui empêche de comprendre, malgré que tout semble évident quand on a déjà une certaine expérience ;
    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
    // fichier .cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
     
    FenPrincipale::FenPrincipale()
    {
        QMenu *menuFichier = menuBar()->addMenu("&Fichier");
        ouvrir = new QAction("&Ouvrir...", this);
        menuFichier->addAction(ouvrir);
        enreg = new QAction("&Enregistrer sous...", this);
        menuFichier->addAction(enreg);
        enreg->setIcon(QIcon("101.png"));
        Imprimer = new QAction("&Imprimer", this);
        menuFichier->addAction(Imprimer);
        Imprimer->setIcon(QIcon("37.png"));
        QAction *actionQuitter = new QAction("&Quitter", this);
        menuFichier->addAction(actionQuitter);
        actionQuitter->setShortcut(QKeySequence("Ctrl+Q"));
        actionQuitter->setIcon(QIcon("quitter.png"));
     
     
        QMenu *menuEdition = menuBar()->addMenu("&Edition");
        choixPolice2 = new QAction("&Police...", this);
        menuEdition->addAction(choixPolice2);
     
     
        QMenu *menuAffichage = menuBar()->addMenu("&Affichage");
        QAction *afficherBE = new QAction("&Barre d' état", this);
        afficherBE->setCheckable(true);
        afficherBE->setChecked(true);
        menuAffichage->addAction(afficherBE);
     
        QToolBar *toolBarFichier = addToolBar("Fichier");
        toolBarFichier->addAction(actionQuitter);
        toolBarFichier->addAction(enreg);
     
        toolBarFichier->addSeparator();
     
        QFontComboBox *choixPolice = new QFontComboBox;
        toolBarFichier->addWidget(choixPolice);
        choixPolice->setEditable(false);
     
        QStatusBar *barreEtat = statusBar();
        barreEtat->showMessage("Prêt");
        actionQuitter->setStatusTip("Quitte le programme");
        enreg->setStatusTip("Enregistré!");
     
        QMdiArea *zoneCentrale = new QMdiArea;
     
        zoneTexte1 = new QTextEdit;
     
        //QMdiSubWindow *sousFenetre1 = zoneCentrale->addSubWindow(zoneTexte1);
        zoneCentrale->addSubWindow(zoneTexte1);
        zoneCentrale->setViewMode(QMdiArea::TabbedView);
     
        QObject::connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit()));
        QObject::connect(choixPolice2, SIGNAL(triggered()), this, SLOT(ouvrirDialogue()));
        QObject::connect(choixPolice, SIGNAL(currentFontChanged(QFont)), zoneTexte1, SLOT(setCurrentFont(QFont)));
        QObject::connect(enreg, SIGNAL(triggered()), this, SLOT(Save()));
        QObject::connect(afficherBE, SIGNAL(stateChanged(int)), barreEtat, SLOT(hide()));
        QObject::connect(ouvrir, SIGNAL(triggered()), this, SLOT(Open()));
        QObject::connect(Imprimer, SIGNAL(triggered()), this, SLOT(imprimerTexte()));
     
        setCentralWidget(zoneCentrale);
    }
     
    void FenPrincipale::ouvrirDialogue()
    {   bool ok = false;
        QFont police = QFontDialog::getFont(&ok, zoneTexte1->font(), this, "Choisissez une police");
     
        if (ok)
        {   zoneTexte1->setFont(police);
        }
    }
     
    void FenPrincipale::Save()
    {   QString fichier = QFileDialog::getSaveFileName(this, "Enregistrer un fichier", ".","Page Web(*.html *.htm)");
        if (fichier.isEmpty()) return;
        QFile file(fichier);
     
        if (file.open(QFile::WriteOnly | QFile::Truncate)) // si l'ouverture s'est bien passée
        {
            // permet d'écrire dans le fichier
            QTextStream out(&file);
            out << zoneTexte1->toHtml();
            file.close();
        }
        else
            QMessageBox::warning(this,"Erreur","Une erreur s'est prosuite lors de l'ouverture du fichier");
    }
     
    void FenPrincipale::Open()
    {   QString fichier = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "Page Web(*.html *.htm)");
        QFile file(fichier);
     
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
            return;
        zoneTexte1->setText(QString(file.readAll()));
    }
     
    void FenPrincipale::imprimerTexte()
    {   QPrinter printer;
        QTextDocument doc;
        QString TE = zoneTexte1->toHtml();
        QPrintDialog *dialog = new QPrintDialog(&printer, this);
     
        doc.setHtml(TE);
        dialog->setWindowTitle(tr("Print Document"));
        if (zoneTexte1->textCursor().hasSelection())
             dialog->addEnabledOption(QAbstractPrintDialog::PrintSelection);
        if (dialog->exec() == QDialog::Accepted)
             doc.print(&printer);
    }
    Je me souviens plus si j'ai dû aussi modifier d'autre fichier que le .cpp, mais sinon, ça devrait être assez léger...

    Ben devqt, j'espère que sa pourra de filer un coup de main

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

Discussions similaires

  1. [VB.NET]Comment Imprimer une form
    Par bernard06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/10/2011, 17h43
  2. [CR] Comment imprimer dans le bon ordre
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 18/05/2004, 11h11
  3. [Impression] Comment imprimer un .txt?
    Par Grosgrognon dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 27/04/2004, 13h19
  4. Comment imprimer des tabulations ?
    Par Invité dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 11h30
  5. Comment imprimer le contenu d'un TStringGrid
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/06/2002, 15h41

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