Frage

Ich wollte oft QTextEdit als schnelles Mittel zur Anzeige verwenden, was geschrieben wird in einem Stream. Das heißt, anstatt zu QTextStream aus (stdout) zu schreiben, ich will zu tun, so etwas wie:

 QTextEdit qte; 
 QTextStream out(qte);  

Ich könnte etwas ähnliches tun, wenn ich ein Signal nach dem Schreiben auf einen QTextStream emittieren an einem QString.
Das Problem ist, dass ich die Schnittstelle soll das sein so, wie es wäre, wenn ich stdout etc Streaming wurde.

out << some data << endl;

Alle Ideen, wie ich dies erreichen könnte?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Sie können die QTextEdit Unterklasse und die << Operator implementieren, um ihm das Verhalten Sie wollen; so etwas wie:

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

        return *this;
    }
};

Andere Tipps

Sie können eine QIODevice erstellen, die Ausgänge zu 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 ;
// ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top