1

textedit の最初の出力は数値 3 です。なぜその数値が Qt::LogText から来ているのかわかりません。この質問は、私が尋ねた以前の質問に基づいています。以下のリンクから同じ qdebugstream ヘッダー ファイルを使用しています。

std::cout を QTextEdit にリダイレクトする

以下の新しいプロジェクトは、cout を textedit にリダイレクトする QT Gui アプリケーションです。また、settextformat() は QTextEdit のメンバーではなくなったため、Qt::LogText を文字列に変換しました。

これは別の投稿に基づいていましたが、解決策がわかりませんでした。 QTextEdit::setTextFormat(Qt::LogText) はもう存在しません。他に何を使用してログを記録できますか? . 誰かがこれについてもっと情報を提供できますか?

メインウィンドウ.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"



MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    ui->textEdit->setReadOnly(true);
    ui->textEdit->setText(QString("%1").arg(Qt::LogText));

    QDebugStream qout(std::cout, ui->textEdit);

    cout << "Send this to the Text Edit!" << endl;

}

MainWindow::~MainWindow()
{
    delete ui;
}

Mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "qdebugstream.h"
#include "stdio.h"
#include "iostream"

using namespace std;

namespace Ui {
class MainWindow;
}

class QtextEdit;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
4

1 に答える 1

2

Qt :: LogTextのテキスト形式でQ3TextEdit(Qt 3.xのQTextEdit)を使用すると同等と思われるQt 4.xでQPlainTextEditを使用する必要があります。

QDebugStream の QPlainTextEdit バージョンは次のようになります (append() mem func が addPlainText() に名前が変更され、それがビオラであることに気付くかもしれません)。お役に立てれば。

#ifndef QDEBUGSTREAM_H
#define QDEBUGSTREAM_H

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

class QDebugStream : public std::basic_streambuf<char>
{
public:
    QDebugStream(std::ostream &stream, QPlainTextEdit* 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->appendPlainText(m_string.c_str());

        m_stream.rdbuf(m_old_buf);
    }

protected:
    virtual int_type overflow(int_type v)
    {
        if (v == '\n')
        {
            log_window->appendPlainText(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->appendPlainText(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;


    QPlainTextEdit* log_window;
};

#endif
于 2012-10-21T09:14:46.650 に答える