2010-02-28 3 views
4

Я часто хотел использовать QTextEdit в качестве быстрого средства отображения того, что записывается в поток. То есть, вместо того, чтобы писать в QTextStream из (стандартного вывода), я хочу , чтобы сделать что-то вроде:Поток в QTextEdit через QTextStream

QTextEdit qte; 
QTextStream out(qte); 

я мог бы сделать что-то подобное, если я испускать сигнал после записи на QTextStream прикрепленных к QString.
Проблема заключается в том, что я хочу, чтобы интерфейс быть же, как это было бы, если бы я стекались к stdout и т.д .:

out << some data << endl; 

Любые идеи о том, как я могу это сделать?

Заранее спасибо.

ответ

2

Вы можете подклассифицировать QTextEdit и реализовать оператор <<, чтобы придать ему поведение; что-то вроде:

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

     return *this; 
    } 
}; 
+0

Nice. Я также пытался это сделать, но целый день пытался провести цепочки операторов без каких-либо эффектов. Спасибо – Moomin

+1

Однако по-прежнему невозможно использовать опции 'QTextStream' (например, форматирование вывода) – Moomin

7

Вы можете создать QIODevice, который выводится в QTextEdit.

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 ; 
// ... 
Смежные вопросы