2010-02-28 121 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 ; 
// ...