4

QTextEdit を、ストリームに書き込まれている内容をすばやく表示する手段として使用したいと思うことがよくありました。つまり、QTextStream out(stdout) に書き込むのではなく、次のようなことをしたいと考えています。

 QTextEdit qte; 
 QTextStream out(qte);  

QString にアタッチされた QTextStream に書き込んだ後にシグナルを送信すると、同様のことができます。
問題は、インターフェイスをストリーミングする場合と同じにしたいことですstdout

out << some data << endl;

これを達成する方法についてのアイデアはありますか?

前もって感謝します。

4

2 に答える 2

8

QTextEdit に出力する QIODevice を作成できます。

class TextEditIoDevice : public QIODevice 
{
    Q_OBJECT

public:
    TextEditIoDevice(QTextEdit *const textEdit, QObject *const parent) 
        : QIODevice(parent)
        , textEdit(textEdit)
    {
        open(QIODevice::WriteOnly|QIODevice::Text);
    }

    //...

protected:
    qint64 readData(char *data, qint64 maxSize) { return 0; }
    qint64 writeData(const char *data, qint64 maxSize)
    {
        if(textEdit)
        {
            textEdit->append(data);
        }
        return maxSize;
    }

private:
    QPointer<QTextEdit> textEdit;
};


// In some dialogs constructor
QTextStream  ss(new TextEditIoDevice(*ui.textEdit, this));
ss <<  "Print formatted text " <<hex << 12 ;
// ...
于 2010-03-01T09:19:31.433 に答える
2

をサブクラス化しQTextEdit、演算子を実装し<<て、必要な動作を与えることができます。何かのようなもの:

class TextEdit : public QTextEdit {
    .../...
    TextEdit & operator<< (QString const &str) {
        append(str);

        return *this;
    }
};
于 2010-02-28T15:18:57.933 に答える