将 std::cout 重定向到 QTextEdit

pau*_*l23 5 c++ qt iostream

是否有可能(更重要的是 -how-)将输出流重定向到 QTextBox。这样,如果我std::cout << "test"在应用程序中的任何位置写入,它都会被重定向到我定义的文本框?

我尝试了显而易见的(其中 ui.textEdit 是指向文本编辑框的指针):

std::cout.rdbuf(ui.textEdit);
std::cout << "test";
Run Code Online (Sandbox Code Playgroud)

然而这行不通。(明显地)。- 将 cout 重定向到 qDebug 也不起作用(甚至将 qDebug 定向到文本字段)。

我正在使用 qt4.8 顺便说一句...

编辑:所以我尝试了邮件列表中发布的解决方案。但是现在出现了访问冲突。

class MainInterface : public QMainWindow
{
    Q_OBJECT
....
private: 
    QDebugStream qout
Run Code Online (Sandbox Code Playgroud)

使用构造函数:

MainInterface::MainInterface(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags),
    qout(std::cout, ui.textEdit)
{
Run Code Online (Sandbox Code Playgroud)

在成员函数中,发布了以下行: std::cout << "Project Loaded" << std::endl;

该行现在会导致来自“qscoped_pointer”的访问冲突。(我应该将更多细节作为单独的问题发布吗?)

编辑:嗯,“解决方案”是在 ui.textEdit 完全创建后才声明 qout 。

Seb*_*ach 1

您可以重置cout为您自己的ostream实现,这将发出emit您挂接到append插槽上的信号。因此,您的子问题/练习是:

  1. 重定向cout
  2. 重定向cout到您自己的ostream实现或您可以扩展的实现
  3. emit信号给QTextBox

据我所知,这些子主题可以在 SO 上找到