gpt4 book ai didi

c++ - 将 std::cout 重定向到 QTextEdit

转载 作者:太空狗 更新时间:2023-10-29 23:08:16 25 4
gpt4 key购买 nike

<分区>

我是 Qt 应用程序开发的新手,非常感谢您的帮助。这是一个重新发布 redirect std::cout to QTextEdit

我正在尝试将 std::cout 重定向到 QTextEdit 并且我已经看到并尝试测试以下链接中提供的示例。

引用链接1:http://lists.trolltech.com/qt-interest/2005-06/thread00166-0.html

使用 Qt Creator 2.4.1 测试引用链接 1 中的示例。

untiled1.pro

SOURCES += \
main.cpp
HEADERS += \
qdebugstream.h

qdebugstream.h

    #ifndef QDEBUGSTREAM_H
#define QDEBUGSTREAM_H

#include <iostream>
#include <streambuf>
#include <string>

#include "qtextedit.h"

class QDebugStream : public std::basic_streambuf<char>
{
public:
QDebugStream(std::ostream &stream, QTextEdit* text_edit) : m_stream(stream)
{
log_window = text_edit;
m_old_buf = stream.rdbuf();
stream.rdbuf(this);
}
~QDebugStream()
{
// output anything that is left
if (!m_string.empty())
log_window->append(m_string.c_str());

m_stream.rdbuf(m_old_buf);
}

protected:
virtual int_type overflow(int_type v)
{
if (v == '\n')
{
log_window->append(m_string.c_str());
m_string.erase(m_string.begin(), m_string.end());
}
else
m_string += v;

return v;
}

virtual std::streamsize xsputn(const char *p, std::streamsize n)
{
m_string.append(p, p + n);

int pos = 0;
while (pos != std::string::npos)
{
pos = m_string.find('\n');
if (pos != std::string::npos)
{
std::string tmp(m_string.begin(), m_string.begin() + pos);
log_window->append(tmp.c_str());
m_string.erase(m_string.begin(), m_string.begin() + pos + 1);
}
}

return n;
}

private:
std::ostream &m_stream;
std::streambuf *m_old_buf;
std::string m_string;


QTextEdit* log_window;
};

#endif

主要.cpp

#include "qdebugstream.h"
#include "qtextedit.h"
#include <QtGui>

int main(int argc, char **argv)
{
QApplication application(argc, argv);
application.connect(&application, SIGNAL(lastWindowClosed()),
&application, SLOT(quit()));

QMainWindow* mainWindow = new QMainWindow();

QTextEdit* myTextEdit = new QTextEdit(mainWindow, "myTextEdit");
myTextEdit->setTextFormat(Qt::LogText);
QDebugStream qout(std::cout, myTextEdit);

mainWindow->show();
std::cout << "Send this to the Text Edit!" << std::endl;

return application.exec();
}

我收到以下错误消息:

C:\Documents and Settings\Administrator\untitled1-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2010__Qt_SDK__Debug..\untitled1\main.cpp:13: error: C2664: 'QTextEdit::QTextEdit(const QString &,QWidget *)' : cannot convert parameter 1 from 'QMainWindow *' to 'const QString &' Reason: cannot convert from 'QMainWindow *' to 'const QString' No constructor could take the source type, or constructor overload resolution was ambiguous

C:\Documents and Settings\Administrator\untitled1-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2010__Qt_SDK__Debug..\untitled1\main.cpp:14: error: C2039: 'setTextFormat' : is not a member of 'QTextEdit'

c:\qtsdk\desktop\qt\4.8.1\msvc2010\include\qtgui\qtextedit.h:70: see declaration of 'QTextEdit'

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com