2010-02-28 83 views
4

我经常想用QTextEdit作为快速的方式来显示正在将什么被写入到流中 。也就是说,不是写QTextStream输出(输出),我想 做这样的事情:如果我写连接到一个QString的一个QTextStream 后发出信号通过QTextStream流式传输到QTextEdit

QTextEdit qte; 
QTextStream out(qte); 

我可以做同样的事情。
的问题是,我想要的界面是相同 因为它想如果我被分流到stdout等:

out << some data << endl; 

,我怎么可能做到这一点任何想法?

在此先感谢。

回答

2

您可以继承QTextEdit并实施<<运算符,以使其具有您想要的行为;例如:

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

     return *this; 
    } 
}; 
+0

不错。我也试图这样做,但我花了整整一天的时间试图让操作符链工作没有任何效果。谢谢 – Moomin 2010-02-28 16:23:54

+1

但是,仍然无法使用'QTextStream'选项(例如输出格式) – Moomin 2010-02-28 16:31:48

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 ; 
// ...