我经常想使用QTextEdit作为显示正在编写内容的快速方法 到一个流。也就是说,我想要的不是写入QTextStream(stdout) 做类似的事情:
QTextEdit qte;
QTextStream out(qte);
如果我在写入QTextStream后发出信号,我可以做类似的事情
附在QString上。
问题是我希望界面是
和我流入stdout
等时的情况相同:
out << some data << endl;
关于如何实现这一目标的任何想法?
提前致谢。
答案 0 :(得分: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 ;
// ...
答案 1 :(得分:2)
您可以继承QTextEdit
并实施<<
运算符,为其提供所需的行为;类似的东西:
class TextEdit : public QTextEdit {
.../...
TextEdit & operator<< (QString const &str) {
append(str);
return *this;
}
};