ich möchte eine Klasse so von std::ostream ableiten, dass ich sie einer Funktion übergeben kann, die ein std::ostream & erwartet.
Ziel des Ganzen ist es, dass ich in einer Worker-Klasse in einem extra Thread mehrere Funktionen aufrufe, deren Ausgaben dann per Signal an die GUI weitergeleitet werden sollen, so dass sie dann in einem QTextBrowser dargestellt werden.
Allerdings bin ich mir über das Vorgehen noch nicht ganz im klaren. Wenn ich es richtig verstanden habe, muss ich einen Konstruktor (und Destruktor) für die TextWriter-Klasse implementieren, da diese nicht von der abgeleiteten Klasse übernommen werden. Es will mir aber nicht so recht gelingen. Kann ich einfach den <<-Operator überladen, oder muss ich noch andere Funktionen berücksichtigen? Ich habe noch etwas von der flush()-Funktion gelesen und dass man auf EOF prüfen sollte.
Mein bisheriger Versuch der TextWriter-Klasse sieht folgendermaßen aus:
Code: Alles auswählen
class TextWriter :
public QObject, public std::ostream
{
Q_OBJECT
public:
TextWriter() : std::ostream((std::streambuf*)0) {};
TextWriter & operator<< (QString const &str) {
emit FORWARD_listWidget_Log_NewItem(str);
return *this;
}
signals:
void FORWARD_QTextBrowser_NewItem(QString);
};
Wo genau sollte ich dieses Codestück einfügen? Im Moment habe ich es in einer .h-Date, die von mehreren Klassen inkludiert wird. Allerdings entsteht dadurch der Fehler, dass der <<Operator mehrfach definiert wurde (fatal error LNK1169: one or more multiply defined symbols found).
Vielen Dank für eure Vorschläge!