Überladen von ostream
-
Hi,
ich möchte den ostream an ein QTextEdit umleiten.
In einem QT-Programm möchte ich alle Ausgabe komfortabel mit dem std::cout in ein QTextEdit schicken. Das soll für alle Standardtypen, die ostream kennt funktionieren und für Objekte vom Typ QString.
Ich habe schonmal was angefangen und bin direkt an meine Grenzen gestoßen:
class LabelTest : public QWidget { Q_OBJECT public: LabelTest(QWidget *parent = 0); private: QTextEdit *text; }; std::ostream& operator << (std::ostream& os, const QString& qs); LabelTest::LabelTest(QWidget *parent) : QWidget(parent) { text = new QTextEdit("Das hier steht schonmal drin", parent); // layout QVBoxLayout *layout = new QVBoxLayout; text->append("Juhu, was Neues!!!"); layout->addWidget(text); setLayout(layout); text->append("Das hier geht"); QString test("das nicht"); std::cout << test; } std::ostream& operator << (std::ostream& os, const QString& qs) { //os << qs.toStdString(); text->append(qs); return os; }Mein Problem: label ist nicht global und soll es auch nicht werden. Trotzdem sollte std::ostream& operator << (std::ostream& os, const QString& qs)
label natürlich kennen und damit arbeiten dürfen.
Wie kann man das erledigen?Vielen Dank,
Karl
-
Oder macht man sowas vom Konzept her schon ganz anders?
Karl
-
mach einen freund daraus.
friend std::ostream& operator << (std::ostream& os, const hier_die_klasse& qs);mit in die klasse
jedoch überleg dir nochmal das objekt, dass du mit 'ostream' haben möchtest, und überlade für diese klasse die streams.
-
Du musst einen eigenen Streambuffer schreiben und den Streambuffer von cout durch diesen ersetzen.
Schau Dir mal diesen Thread an, da solltest Du alles an Startinfos finden:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-36062-and-highlight-is-streambuffer.htmlAnsonsten, wenn Du den Josuttis hast, da wird das Thema auch recht gut behandelt.
-
wxWidgets bietet eine Klasse wxStreamToTextRedirector an,
evtl. kannst du dir ja mal die Sourcen anschauen, oder QT bietet etwas ähnliches.