PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QTextBrowser und drucken



Kirsche
06-10-2005, 14:30
Hallo Leute,

mein Fenster (abgeleitet von QTextEdit) enthält Daten, die sich innerhalb einer html-Tabelle befinden. Kann ich das auch ausdrucken? Ich weiß, dass ich unter Qpainter "drawText" benutzen kann, aber ich weiß nicht, wie man QTextEdit zeilenweise ausliest und - noch wichtiger - wie man html-Tabellen mitdruckt.
Beim Auslesen würden mir vermutlich auch die html-Tags in die Quere kommen, oder?

Vielen Dank,

anda_skoa
06-10-2005, 16:29
So auf die Schnelle hab ich folgende Idee.

Nachdem du ableitest, hast du Zugriff auf drawContents.
Du könntest einen QPrinter anlegen und dann damit als QPainter die drawContents aufrufen.

Ciao,
_

Kirsche
07-10-2005, 09:29
Hallo anda_skoa,

ich habe einen QPrinter angelegt, aber den kann ich nicht als QPainter benutzen. Die Funktion verlangt dann nach einem QPainter.
Wenn ich
p.fillRect( 0, 0, this->width(), this->height(), colorGroup().brush( QColorGroup::Base ) );
this->drawContents( &p );
benutze , bekomme ich die Meldung:
"drawContents" : Kein Zugriff auf private Element, dessen Deklaration in der Klasse "QTextEdit" erfolgte

Irgendwie stehe ich auf dem Schlauch.

Schöne Grüße,

anda_skoa
07-10-2005, 15:16
Hallo anda_skoa,

ich habe einen QPrinter angelegt, aber den kann ich nicht als QPainter benutzen. Die Funktion verlangt dann nach einem QPainter.


Hmm, stimmt, sorry. Einen QPainter mit dem QPrinter als PaintDevice anlegen.



Wenn ich
p.fillRect( 0, 0, this->width(), this->height(), colorGroup().brush( QColorGroup::Base ) );
this->drawContents( &p );
benutze , bekomme ich die Meldung:
"drawContents" : Kein Zugriff auf private Element, dessen Deklaration in der Klasse "QTextEdit" erfolgte


Hmm, das sieht so aus, als wäre drawContents im QTextEdit private declariert worden. In QScrollView ist es noch protected.

Soweit ich das sehe betrifft das aber nur die Variante mit einem Parameter, cnit die mit fünf.

Ciao,
_

Uwe
07-10-2005, 19:34
Nachdem du ableitest, hast du Zugriff auf drawContents.
Du könntest einen QPrinter anlegen und dann damit als QPainter die drawContents aufrufen.
_
Sowas macht man besser mit QPixmap::grabWidget() (eventuell nur auf den viewport()). Das QPixmap kann man dann nachher mit QPainter::drawPixmap auf einen QPrinter ausdrucken.

Eine ordentliche Lösung geht aber nur über QSimpleRichText::draw oder QPainter::drawText und bedeutet Arbeit.

Uwe

Kirsche
08-10-2005, 10:58
Hallo anda_skoa, hallo Uwe,

danke für eure Tipps. Ich habe es jetzt so ausprobiert, wie es Uwe gesagt hat. Das klappt im Prinzip auch. Allerdings geht der Text über den Bildschirm hinaus. Dadurch drucke ich nur den Teil, der gerade sichtbar ist. Außerdem ist die Pixmap sehr klein. Ich denke, wenn ich sie vergrößere, wird sie pixelig.

Ich glaube, ich muss den komplizierten Weg gehen, sonst wird das nichts.

Wenn ich QSimpleRichText benutze, kann ich meine Tabellen mitdrucken, oder? Ich würde dann zeilenweise durch das Dokument laufen und y immer um die Zeilenbreite und einen Abstand erhöhen ( y ist die Höhe ). Oder wie macht man das, damit die Tabellen mitgedruckt werden?

Schöne Grüße,
Kirstin

Kirsche
10-10-2005, 10:57
Hallo Leute,

das Drucken funktioniert jetzt, nur die Interpretation ist noch falsch. Es wird also gedruckt ( hab guten Beispiel-Code dafür gefunden ), aber die Tags werden noch nicht als html-Code erkannt, es werden also alle Tags mitgedruckt.

Weiß jemand, was ich einstellen muss ( und wo ), damit Tabellen gedruckt werden?

Schöne Grüße

Kirsche
10-10-2005, 12:41
Hallo Leute,

ich kann jetzt auch html drucken. Man sollte wohl nicht blind einfach Code übernehmen. Der Eintrag "QStyleSheet::convertFromPlainText(e->text())" hat dafür gesorgt, dass aus dem html-code normaler Text wurde.

Jetzt habe ich nur noch zwei Fragen:

1.
Woran kann es liegen, dass mein Text (Überschrift und Datum) auf eine Seite gedruckt wird, der Rest der Seite frei bleibt und es dann auf der nächsten Seite weitergeht? Anschließend werden die Tabellen einfach abgeschnitten, und es geht auf der nächsten Seite normal weiter. Warum also nicht auf der ersten Seite?

2.
Wie ermittelt man die Anzahl der Seiten, BEVOR das Druckermenü aufgeht? Muss man alle Seiten vorher einmal ablaufen?

Schöne Grüße