Te1=new QTextBrowser(this);//顯示框 Te1->setText("程序輸出"); Te1->setGeometry(200,855,775,100);別的函數的cout,到指定Te1窗口
时间: 2024-02-06 10:08:58 浏览: 123
你想要将程序输出重定向到指定的 QTextBrowser 窗口中。可以使用以下代码:
```cpp
#include <iostream>
#include <streambuf>
#include <string>
#include <QTextBrowser>
class TextBrowserStreamBuf : public std::streambuf
{
public:
TextBrowserStreamBuf(QTextBrowser* textBrowser)
: m_textBrowser(textBrowser)
{
setp(m_buffer, m_buffer + BufferSize - 1);
}
~TextBrowserStreamBuf()
{
sync();
}
protected:
int_type overflow(int_type c) override
{
if (c == traits_type::eof())
{
return sync() ? traits_type::eof() : traits_type::not_eof(c);
}
*pptr() = c;
pbump(1);
return sync() ? traits_type::eof() : traits_type::not_eof(c);
}
int sync() override
{
*pptr() = '\0';
std::string output(m_buffer);
m_textBrowser->append(output.c_str());
setp(m_buffer, m_buffer + BufferSize - 1);
return 0;
}
private:
static const int BufferSize = 1024;
char m_buffer[BufferSize];
QTextBrowser* m_textBrowser;
};
class TextBrowserStream : public std::ostream
{
public:
TextBrowserStream(QTextBrowser* textBrowser)
: std::ostream(&m_buffer)
, m_buffer(textBrowser)
{
}
private:
TextBrowserStreamBuf m_buffer;
};
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
QWidget widget;
QTextBrowser textBrowser(&widget);
textBrowser.setGeometry(200, 855, 775, 100);
textBrowser.show();
TextBrowserStream textBrowserStream(&textBrowser);
std::cout.rdbuf(textBrowserStream.rdbuf());
std::cout << "Hello, world!\n";
return a.exec();
}
```
这段代码定义了一个 TextBrowserStreamBuf 类,它是一个 std::streambuf 的子类,用于重定向程序输出到 QTextBrowser 窗口中。TextBrowserStreamBuf 类的 overflow() 函数和 sync() 函数负责将输出缓冲区的内容输出到 QTextBrowser 窗口中。
然后定义了一个 TextBrowserStream 类,它是一个 std::ostream 的子类,用于管理 TextBrowserStreamBuf 类的实例。在 main() 函数中,创建了一个 QTextBrowser 窗口和一个 TextBrowserStream 类的实例,并使用 std::cout.rdbuf() 函数将程序输出重定向到 TextBrowserStream 类的实例中。
使用这段代码,你可以将程序输出重定向到指定的 QTextBrowser 窗口中。
阅读全文