Streaming para Qtextedit via QtextStream
Pergunta
Muitas vezes eu queria usar o Qtextedit como um meio rápido de exibir o que está sendo escrito em um fluxo. Ou seja, em vez de escrever para QtextStream Out (stdout), quero fazer algo como:
QTextEdit qte;
QTextStream out(qte);
Eu poderia fazer algo semelhante se emitir um sinal depois de escrever para um QtextStream conectado a um QString.
O problema é que eu quero que a interface seja a mesma de stdout
etc.:
out << some data << endl;
Alguma idéia de como eu posso conseguir isso?
Desde já, obrigado.
Solução
Você pode subclasse o QTextEdit
e implementar o <<
operador para dar o comportamento que você deseja; algo como:
class TextEdit : public QTextEdit {
.../...
TextEdit & operator<< (QString const &str) {
append(str);
return *this;
}
};
Outras dicas
Você pode criar um qiodevice que sai para 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 ;
// ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow