2010-02-28 3 views
4

나는 종종 을 스트림에 표시하는 빠른 방법으로 QTextEdit을 사용하려고했습니다. 나는 QString에 부착 된 QTextStream 에 쓰기 한 후 신호를 방출하면 내가 비슷한 뭔가를 할 수QTextStream을 통해 QTextEdit에 스트리밍

QTextEdit qte; 
QTextStream out(qte); 

: 즉, 내가 같은 것을하고 싶지 않고 (표준 출력) 출력 QTextStream을 쓰기보다는이다.
문제는 내가 인터페이스 내가 stdout 등 :

out << some data << endl; 

나는이 작업을 수행 할 수있는 방법에 대한 아이디어를 스트리밍 된 경우는 것과 동일한 되고 싶은 것입니다?

미리 감사드립니다.

답변

2

QTextEdit의 하위 클래스를 만들고 << 연산자를 구현하여 원하는 동작을 제공 할 수 있습니다. 예 :

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

     return *this; 
    } 
}; 
+0

니스. 나는 또한 그런 식으로 노력했지만 하루 종일 아무런 효과없이 작동 체인 연결 작업을 만들려고 노력했습니다. 감사합니다 – Moomin

+1

그러나'QTextStream' 옵션 (예 : 출력 형식 지정)을 사용할 수 없습니다. – Moomin

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