通过QTextStream流式传输到QTextEdit

时间:2010-02-28 11:54:07

标签: c++ qt qt4 qtextedit

我经常想使用QTextEdit作为显示正在编写内容的快速方法 到一个流。也就是说,我想要的不是写入QTextStream(stdout) 做类似的事情:

 QTextEdit qte; 
 QTextStream out(qte);  

如果我在写入QTextStream后发出信号,我可以做类似的事情 附在QString上。
问题是我希望界面是 和我流入stdout等时的情况相同:

out << some data << endl;

关于如何实现这一目标的任何想法?

提前致谢。

2 个答案:

答案 0 :(得分:7)

您可以创建一个输出到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 ;
// ...

答案 1 :(得分:2)

您可以继承QTextEdit并实施<<运算符,为其提供所需的行为;类似的东西:

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

        return *this;
    }
};