QTextEdit drucken

Alles rund um die Programmierung mit Qt
Antworten
Enigmon
Beiträge: 3
Registriert: 21. April 2006 23:42

QTextEdit drucken

Beitrag von Enigmon »

Druckt nicht was er soll:
qt 334

QTexTedit* e = new QTextEdit(this);
e->setTextFormat(Qt::RichText);

Füllen mit Werten aus lineedits:
(in einer tabelle ohne Border)


e->append("<h1>Allgemein</h1>");
e->append("\n");
e->append("<table><tr><td>Betten : </td><td>"+leBetten->text()+
"</td></tr>"+QString::fromUtf8("<tr><td>Gäste : </td><td>")+leGaeste->text()+"</td></tr>"+
QString::fromUtf8("<tr><td>Übernachtungen : </td><td>")+leUebernachtungen->text()+"</td></tr>"+
"<tr><td>Kurabgabe : </td><td>"+leKurabgabe->text()+"</td></tr>"+
QString::fromUtf8("<tr><td>Übernachtungen/Gast : </td><td>")+leUeber_Gast->text()+"</td></tr>"+
QString::fromUtf8("<tr><td>Kurabgabe/Gast : </td><td> ")+leKurabgabe_Gast->text()+"</td></tr>"+
QString::fromUtf8("<tr><td>Übernachtungen/Bett : </td><td> ")+leUeber_Bett->text()+"</td></tr>"+"</table>\n\n");

Die Darstellung in einem QTextEdit ist einwandfrei, aber beim drucken ist das Problem:

die Funktion:


void StatistikFenster::drucken( )
{
printer->setFullPage( TRUE );
if ( printer->setup(this) ) { // printer dialog
QPainter p;
if( !p.begin( printer ) ) { // paint on printer
return;
}
e->setTextFormat(Qt::PlainText);
QPaintDeviceMetrics metrics( p.device() );
int dpiy = metrics.logicalDpiY();
int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins
QRect view( margin, margin, metrics.width() - 2*margin, metrics.height() - 2*margin );
QSimpleRichText richText( QstyleSheet::convertFromPlainText(
e->text()),
QFont(),
e->context(),
e->styleSheet(),
e->mimeSourceFactory(),
view.height());
richText.setWidth( &p, view.width() );
int page = 1;
do {
richText.draw( &p, margin, margin, view, colorGroup() );
view.moveBy( 0, view.height() );
p.translate( 0 , -view.height() );
p.drawText( view.right() - p.fontMetrics().width( QString::number( page ) ),
view.bottom() + p.fontMetrics().ascent() + 5, QString::number( page ) );
if ( view.top() - margin >= richText.height() )
break;
printer->newPage();
page++;
} while (TRUE);

} else {
//statusBar()->message( "Printing aborted", 2000 );
}
}

(kopiert aus der Trolltech Doku und angepasst)
leider druckt er die Formatierung und die Werte aus

<table><tr><td>25</td><td>... usw.

Weiss jemand, was ich tun muss damit es korrekt ausgedruckt wird, also nur Formatierter Text?

z.B.
Betten(5 Leerzeichen)25
Gäste(6 Leerzeichen )30
....

Vielen Dank Thomas
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

dies ist ein extract von ... (einen mini html editor)
http://ciz.ch/svnciz/_STATIC_LIBS_QT4/s ... l_edit.cpp
http://ciz.ch/svnciz/_STATIC_LIBS_QT4/s ... tml_edit.h

und dass drucken geht bestens...
Obwohl ich den html code saubere wie in http://www.qtforum.de/forum/viewtopic.php?t=2216 beschrieben ist....

Code: Alles auswählen

void HTML_Edit::makefilePrint()
{
#ifndef QT_NO_PRINTER
    QPrinter printer(QPrinter::HighResolution);
    printer.setFullPage(true);
    QPrintDialog *dlg = new QPrintDialog(&printer, this);
    if (dlg->exec() == QDialog::Accepted) {
        html_area->document()->print(&printer);
    }
    delete dlg;
#endif
}


void HTML_Edit::makefilePrintPdf()
{
    QSettings setter;
    QString fileName = QFileDialog::getSaveFileName(this, "Export PDF",QString(setter.value("LastDir").toString()), "*.pdf");
    
    if (fileName.size() > 1) {
        QPrinter printer(QPrinter::HighResolution);
        printer.setOutputFormat(QPrinter::PdfFormat);
            if (!fileName.endsWith(".pdf")) {
                         fileName = fileName+".pdf"; 
            }
        ultimacartellaaperta = fileName.left(fileName.lastIndexOf("/"))+"/";
        /* register session  last open dir */
        LastOpenDir(ultimacartellaaperta);
        printer.setOutputFileName(fileName);
        html_area->document()->print(&printer);
        QMessageBox::information( this, tr( "File info." ),tr("Il file è stato salvato"));
    }
}
Enigmon
Beiträge: 3
Registriert: 21. April 2006 23:42

Leider..

Beitrag von Enigmon »

Leider ist die Lösung nur für Qt 4..
javascript:emoticon(':(')
Sad
Ich arbeite mit QT 3.3.4 .
Hast du da auch was parat?
javascript:emoticon(':?:')
Question
Danke schon mal

Thomas
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: Leider..

Beitrag von patrik08 »

Enigmon hat geschrieben:Leider ist die Lösung nur für Qt 4..
Sad
Ich arbeite mit QT 3.3.4 .
Hast du da auch was parat?
Thomas
Wenn du nur qt3 und C sprache kennst.... habe ich nichts auf lager...

aber wenn du mit xml und xslt umgehen kannst .... http://de.wikipedia.org/wiki/XSL_Transformation dann rate ich dir im source code von meine projekt http://sourceforge.net/projects/qtexcel-xslt/
qtexcel-xslt oder im paket auch source Visual_xsltproc_Developer xslt zu suchen respektiv greppen "convert xslt xml " ... mit diese libs kannst du schoene un prazise pdf machen und druken... ist 1000 mal besser als latex ... und vorallem einfacher.... auf dem millimeter genau mis zum 3 meter plotter....

Diese libs laufen auch auf qt3 garantiert.....
Antworten