Streaming per QTextEdit via QTextStream
Domanda
Spesso ho voluto usare QTextEdit come un mezzo rapido di visualizzazione di ciò che viene scritto a un ruscello. Cioè, invece di scrivere a QTextStream out (stdout), voglio fare qualcosa di simile:
QTextEdit qte;
QTextStream out(qte);
ho potuto fare qualcosa di simile se emettere un segnale dopo aver scritto ad un QTextStream
collegato a un QString.
Il problema è che voglio l'interfaccia di essere il
stessa come sarebbe se fossi streaming per stdout
ecc.
out << some data << endl;
Tutte le idee su come potrei fare questo?
Grazie in anticipo.
Soluzione
È possibile creare una sottoclasse del QTextEdit
e implementare l'operatore <<
per dargli il comportamento desiderato; qualcosa di simile:
class TextEdit : public QTextEdit {
.../...
TextEdit & operator<< (QString const &str) {
append(str);
return *this;
}
};
Altri suggerimenti
È possibile creare un QIODevice che emette a 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 ;
// ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow