Imprimer un un qwtplot

Résolu/Fermé
twiiiix Messages postés 325 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 25 janvier 2014 - Modifié par twiiiix le 29/07/2010 à 17:06
twiiiix Messages postés 325 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 25 janvier 2014 - 11 août 2010 à 16:03
Bonjour,
Je développe un programme avec Qt et je suis en train de créé le slot "imprimer", j'ai à imprimer dans l'ordre :
- du texte
- un QTableWidget
- du texte
- un QwtPlot
-un QTableWidget
J'ai fait ça :
void fenPrincipale::imprimer() 
{ 
    QPrinter * printer = new QPrinter(QPrinter::HighResolution); 
    printer->setPaperSize (QPrinter::A4); 
    printer->setOrientation(QPrinter::Portrait); 
    printer->setFullPage(true); 

    QPrintDialog printDialog(printer, this); 
    if ( printDialog.exec() == 1) 
    { 
        QTextBrowser *editor = new QTextBrowser; 

        QTextCharFormat format; 
        format.setFontPointSize(12); 

        //On insere les infos 
        QString modif ="Le texte" 

        editor->setCurrentCharFormat(format); 
        editor->setAlignment(Qt::AlignLeft); 

        //ajout de notre QString a l'endroit du curseur 
        editor->append(modif); 


        //on crée un curseur a l'endroit du curseur actuel 
        QTextCursor cursor = editor->textCursor(); 
        cursor.beginEditBlock(); 

        //Creation du format du tableau qui sera imprimer 
        QTextTableFormat tableFormat; 
        tableFormat.setAlignment(Qt::AlignHCenter); 
        tableFormat.setAlignment(Qt::AlignLeft); 
        tableFormat.setBackground(QColor("#ffffff")); 
        tableFormat.setCellPadding(3); 
        tableFormat.setCellSpacing(3); 

        //Creation du tableau qui sera imprimé avec le nombre de colonne 
        //et de ligne que contient le tableau mis en parametre 
        QTextTable *tableau = cursor.insertTable(vit->rowCount()+1, vit->columnCount(), tableFormat); 
        QTextFrame *frame = cursor.currentFrame(); 
        QTextFrameFormat frameFormat = frame->frameFormat(); 
        frameFormat.setBorder(0); 
        frame->setFrameFormat(frameFormat); 

        //Format des HEADER du tableau 
        QTextCharFormat format_entete_tableau; 
        format_entete_tableau.setFontPointSize(9); 
        format_entete_tableau.setFontWeight(QFont::Bold); 

        //Format du texte des cellules du tableau 
        QTextCharFormat format_cellule; 
        format_cellule.setFontPointSize(9); 

        //on ecrit les HEADERS du tableaux dans le tableau a imprimer 
        for (int i = 0 ; i < vit->columnCount() ; i++ ) 
        { 
            //on selectionne la premiere cellule de chaque colonne 
            QTextTableCell titre = tableau->cellAt(0,i); 
            //on place le curseur a cet endroit 
            QTextCursor cellCursor = titre.firstCursorPosition(); 
            //on écrit dans la cellule 
        cellCursor.insertText(vit->horizontalHeaderItem(i)->text(),format_entete_tableau); 
            } 
        } 
        for (int y = 0 ; y < vit->rowCount(); y++ ) 
        { 
            //on selectionne la premiere cellule de chaque ligne 
            QTextTableCell titre = tableau->cellAt(y+1,0); 
            //on place le curseur a cet endroit 
            QTextCursor cellCursor = titre.firstCursorPosition(); 
            //on écrit dans la cellule 
            cellCursor.insertText(vit->verticalHeaderItem(y)->text(),format_entete_tableau); 
        } 

        QTextTableCell cell; 
        QTextCursor cellCursor; 

        for (int row = 1; row < tableau->rows(); row ++) 
            for (int col = 1; col < tableau->columns(); col ++) 
            { 
                cell = tableau->cellAt(row,col); 
                cellCursor = cell.firstCursorPosition(); 

                cellCursor.insertText(tr("%1").arg(vit->item(row-1,col)->text()),format_cellule); 
            } 

        //fin de l'edition 
               cursor.endEditBlock(); 
        //impression de notre editor dans le QPrinter initialisé au début de la fonction 
        editor->print(printer); 

    } 
:
Pour le moment l'impression marche , mais je ne sais pas comment imprimer le Qwtplot au milieu du reste.
J'avais commencé à faire sa :
        QPainter p; 
        plot->print(&p, QRect(0, 0, 800, 600)); 

Mais je ne sais pas comment ajouter le QPainter à la suite du QTextBrowser qui sera imprimer.
Comment faire ?

Merci d'avance.

5 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
Modifié par loupius le 10/08/2010 à 13:05
J'ai peut-être une réponse; je dis 'peut-être' car je ne suis pas sûr de celle-ci; n'ayant pas d'imprimante sous la main, je n'ai pu essayer ! Mais depuis le temps que je lis ton 'SOS', j'ai pris le temps d'essayer 'Qwt' et de te livrer ma réflexion.
Je propose de dessiner le 'plot' dans un QTextEdit, et je suppose qu'ensuite un 'textEdit->print(printer)' imprimera son contenu, y compris le plot.
Voici un exemple (je ne mets que le strict nécessaire):
  QwtPlot plot(QwtText("Quelle est cette fonction ?"));
  QwtPlotCurve curve;
  QPixmap pixmap(300,200);
  pixmap.fill(QColor(Qt::green));
  double tabX[13], tabY[13];
  for (int i=0; i<13; i++)
    tabX[i] = i, tabY[i] = i*i;
  curve.setData(tabX, tabY, 13);
  curve.attach(&plot);
  plot.replot();
  plot.print(pixmap); 

  QTextEdit textEdit;
  QTextCursor cursor = textEdit.textCursor();
  cursor.beginEditBlock();
  cursor.insertHtml(QString("Plot --->"));
  cursor.insertImage(pixmap.toImage());
  cursor.insertHtml(QString("--- Fin"));
  cursor.endEditBlock();
  textEdit.print(printer);
Ce n'est qu'une idée et il y a sans doute d'autres solutions ;-)
Bonne continuation.
3
twiiiix Messages postés 325 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 25 janvier 2014 56
4 août 2010 à 14:59
UP !
0
twiiiix Messages postés 325 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 25 janvier 2014 56
10 août 2010 à 03:53
UP SVP
0
twiiiix Messages postés 325 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 25 janvier 2014 56
Modifié par twiiiix le 10/08/2010 à 19:56
Merci beaucoup pour ta réponse : )
Je suis en train de restructurer tout mon code, je testerais dès que j'ai fini, sinon je ne vois pas pourquoi ça ne marcherais pas ^^.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
twiiiix Messages postés 325 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 25 janvier 2014 56
11 août 2010 à 16:03
Merci !!!!!!!!!!!!!!!!!!!
J'ai tester, ton code marche ^^.
0