Streaming auf QTextEdit über QTextStream
Frage
Ich wollte oft QTextEdit als schnelles Mittel zur Anzeige verwenden, was geschrieben wird in einem Stream. Das heißt, anstatt zu QTextStream aus (stdout) zu schreiben, ich will zu tun, so etwas wie:
QTextEdit qte;
QTextStream out(qte);
Ich könnte etwas ähnliches tun, wenn ich ein Signal nach dem Schreiben auf einen QTextStream emittieren
an einem QString.
Das Problem ist, dass ich die Schnittstelle soll das sein
so, wie es wäre, wenn ich stdout
etc Streaming wurde.
out << some data << endl;
Alle Ideen, wie ich dies erreichen könnte?
Vielen Dank im Voraus.
Lösung
Sie können die QTextEdit
Unterklasse und die <<
Operator implementieren, um ihm das Verhalten Sie wollen; so etwas wie:
class TextEdit : public QTextEdit {
.../...
TextEdit & operator<< (QString const &str) {
append(str);
return *this;
}
};
Andere Tipps
Sie können eine QIODevice erstellen, die Ausgänge zu QTextEdit.
class TextEditIoDevice : public QIODevice
{
Q_OBJECT
public:
TextEditIoDevice(QTextEdit *const textEdit, QObject *const parent)
: QIODevice(parent)
, textEdit(textEdit)
{
open(QIODevice::WriteOnly|QIODevice::Text);
}
//...
protected:
qint64 readData(char *data, qint64 maxSize) { return 0; }
qint64 writeData(const char *data, qint64 maxSize)
{
if(textEdit)
{
textEdit->append(data);
}
return maxSize;
}
private:
QPointer<QTextEdit> textEdit;
};
// In some dialogs constructor
QTextStream ss(new TextEditIoDevice(*ui.textEdit, this));
ss << "Print formatted text " <<hex << 12 ;
// ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow