Steps:
1. Create a class that inherit std::basic_streambuf
2. Override overflow() function.
Sample codes:
Header
class myos : public std::basic_streambuf<char, char_traits<char> >
{
typedef char_traits<char> _Traits;
public:
myos(QTextEdit* e);
public:
~myos(void);
protected:
virtual int_type __CLR_OR_THIS_CALL overflow(int_type _Meta = _Traits::eof());
virtual int_type __CLR_OR_THIS_CALL pbackfail(int_type _Meta = _Traits::eof());
virtual int_type __CLR_OR_THIS_CALL underflow();
virtual pos_type __CLR_OR_THIS_CALL seekoff(off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
virtual pos_type __CLR_OR_THIS_CALL seekpos(pos_type _Ptr,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
private:
QTextEdit* _editor;
};
Source:
myos::myos(QTextEdit* e):_editor(e)
{
}
myos::~myos(void)
{
}
myos::int_type myos::overflow(myos::int_type _Meta )
{
_editor->insertPlainText(QString(char(_Meta)));
return (_Meta);
}
myos::int_type myos::pbackfail(myos::int_type _Meta )
{ // put an element back to stream
return _Meta;
}
myos::int_type myos::underflow()
{
return 0;
}
myos::pos_type myos::seekoff(myos::off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which )
{ // change position by _Off, according to _Way, _Mode
return 0;
}
myos::pos_type myos::seekpos(myos::pos_type _Ptr,
ios_base::openmode _Mode )
{ // change position to _Pos, according to _Mode
return (std::streampos(0));
}